Linux: cierre un programa con línea de comando (no lo mate)

21

Algunas aplicaciones solo permiten una instancia en ejecución (como eclipse, si desea utilizar el mismo espacio de trabajo). Entonces, si inicio sesión desde otra ubicación, tengo que cerrar / cerrar la aplicación que estaba abierta cuando previamente inicié sesión desde otra ubicación.

Siempre uso el comando kill para matar el proceso en ejecución. Pero, si elimina un proceso, es posible que no guarde algunos estados que son útiles para su uso futuro. Sin embargo, si lo "cierra" correctamente haciendo clic en el botón Cerrar, por ejemplo, guardará los estados correctamente.

¿Hay alguna manera de "cerrar" correctamente una aplicación desde la línea de comandos? Sé que esto puede variar de una aplicación a otra, así que seamos un poco más genéricos: ¿cómo enviar una señal a otra aplicación en ejecución, y esta señal funciona como si hiciéramos clic en el botón "cerrar" en la barra superior?

Vendetta
fuente
2
¿Deberíamos suponer que acceder al escritorio de forma remota con VNC y luego hacer clic en cerrar de manera gráfica es demasiado sobrecarga?
Brian Swift el

Respuestas:

33

Por defecto, el comando kill enviará SIGTERM(señal de terminación) al proceso en ejecución. A diferencia SIGKILL, que matará por la fuerza el proceso sin posibilidad de responder, la SIGTERMseñal puede ser interceptada por el proceso, lo que le permite terminar con gracia. Sea o no que en realidad no terminaba correctamente depende por completo sobre el proceso en sí; puede matarse fácilmente o ignorar la señal por completo.

Puede asegurarse de que está enviando en SIGTERMlugar de alguna otra señal haciéndola explícita en la línea de comando de esta manera:

kill -s TERM <pid>
goldPseudo
fuente
1
Sí, la premisa del OP es falsa. El killcomando intenta un apagado elegante. Si la aplicación no se cierra limpiamente en ese caso, está rota. (Y la gran mayoría de las aplicaciones no están rotas.)
David Schwartz
2
Firefox parece estar (roto). Si ejecuto kill -s TERM <firefox-pid>, no se cerrará correctamente, y cuando lo vuelva a iniciar, me preguntará si quiero recuperar la sesión bloqueada. : suspiro:
Wilson F
6

Tenga en cuenta que cuando se usa en pkilllugar de kill, para especificar TERM la sintaxis es:

pkill -TERM <process-name>

pkill es como matar, pero puede usar el nombre del proceso en lugar de la identificación. man pkill

Connor McCormick
fuente