¿Por qué algunos programas vuelven al shell inmediatamente mientras que otros no lo hacen hasta que se completa la ejecución?

13

Leí en el libro de Modern Operating systems que cuando se ejecuta un comando, el shell crea un proceso hijo, lo espera hasta que el niño haya finalizado la ejecución y luego espera otro comando del usuario. Este es el caso de muchos programas como gedit. El terminal no toma comandos hasta que haya cerrado gedit. Sin embargo, cuando abro el editor de código de átomo , el shell vuelve inmediatamente, listo para aceptar el siguiente comando incluso con el editor en ejecución. Cerrar el terminal no cierra el átomo. ¿Esto significa que el editor no se abrió como un proceso secundario? ¿Cuál es el mecanismo subyacente que hace esto posible?

Correr ps au | grep atomda

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom
Aswin PJ
fuente
1
Después de iniciar el editor de átomos, ¿puede ejecutar ps au | grep atomen la terminal y agregar salida a su pregunta?
Kirill-a
@ Kirill-a He actualizado la pregunta.
Aswin PJ

Respuestas:

18

La pregunta se refiere a dos tipos de programas:

  1. programas que interactúan con el usuario en el shell, y
  2. programas que no interactúan con el usuario en el shell.

En el primer caso, los programas que interactúan con el usuario en el shell están diseñados para ejecutarse hasta su finalización antes de devolver el control al shell. No se hace nada especial.

El segundo caso es más complicado. Típicamente, el programa se bifurcará (haciendo una copia de sí mismo en la memoria), y se encargará de eliminar su asociación con el terminal de control del shell , y puede ejecutar otro programa, que se ejecuta independientemente del shell original. Es posible que vea mensajes del segundo programa, pero por lo general no interactúa con usted. Dependiendo de cómo se use, es posible que tenga

  • un proceso de daemon (servidor), o
  • El programa puede ejecutarse en una nueva ventana. Los editores gráficos hacen lo último.

Otras lecturas:

Thomas Dickey
fuente
La parte de bifurcación y disociación del terminal a menudo se realiza llamando a la daemonfunción de biblioteca que hace todo esto.
Kasperd
Para evitar tener un terminal de control, se usa doble horquilla
jfs
Para ambos comentarios: la función no está en POSIX, y soy consciente de controlar terminales, pero mantuvo la respuesta breve y simple. He usado doble tenedor desde finales de la década de 1980.
Thomas Dickey