GNU/Linux >> Tutoriales Linux >  >> Linux

¿No se puede eliminar el proceso de Gedit desde su Pid?

Esta es la secuencia de comandos, gedit se inicia, pero no se puede eliminar desde su ID de proceso

$ gedit&
$ t=$!
$ echo $t
4824
$ kill $t
bash: kill: (4824) - No such process

Funcionaría bien para un sleep proceso, como

sleep 999&
[1] 4881
$ t=$!
$ echo $t
4881
$ kill $t
$ ps -p $t
[1]   Terminated              sleep 999

¿Cual es la diferencia? ¿Cómo puede el gedit el proceso sea terminado?

Respuesta aceptada:

El gedit el proceso ya está rescindido.

Recuerde cómo las aplicaciones de Windows funcionaban principalmente en Win16 días antes de que Win32 apareciera y lo eliminara:donde había hInstance y hPrevInstance , intentar ejecutar una segunda instancia de muchas aplicaciones simplemente pasaba las cosas a la primera instancia, y esto dificultó las cosas para las herramientas de secuencias de comandos (como Take Command) porque uno invocaría una aplicación por segunda vez, estaría visiblemente allí en el pantalla como una ventana añadida, pero en lo que respecta al intérprete de comandos, ¿el proceso secundario que acababa de ejecutar salió inmediatamente?

Bueno, GNOME ha recuperado el comportamiento de Win16 para Linux.

Con aplicaciones GIO como gedit , la aplicación se comporta de la siguiente manera:

  • Si no hay un "servidor" registrado llamado org.gnome.gedit ya en el Desktop Bus por usuario/por inicio de sesión, gedit decide que es la primera instancia. se convierte el org.gnome.gedit servidor y continúa ejecutándose.
  • Si hay un "servidor" registrado llamado org.gnome.gedit ya en el Desktop Bus por usuario/por inicio de sesión, gedit decide que es una segunda o posterior instancia. Construye mensajes de Desktop Bus a la primera instancia, pasando a lo largo de sus opciones y argumentos de línea de comando, y luego simplemente sale .

Entonces, lo que ves depende de si tienes el gedit servidor ya funcionando. Si no lo ha hecho, estará en el lugar de sebvieira y se preguntará por qué no está viendo el comportamiento descrito. Si es así, estará en su lugar y verá el gedit el proceso finaliza casi de inmediato, especialmente porque no le ha dado ninguna opción de línea de comandos o argumentos para enviar a la "primera instancia". De ahí la razón por la que ya no hay un proceso con esa ID.

Se produce mucha diversión cuando, como se mencionó anteriormente, el Bus de escritorio por inicio de sesión se cambia al estilo "nuevo" de un Bus de escritorio por usuario, y de repente no hay una relación 1:1 entre un Bus de escritorio y una pantalla X. más. De repente, las aplicaciones de instancia de bus de usuario único tienen que ser capaces de comunicarse con varias pantallas X al mismo tiempo.

Se produce más hilaridad cuando las personas intentan ejecutar gedit como superusuario a través de sudo , ya que no puede conectarse a un bus de escritorio por usuario o se conecta al bus de escritorio incorrecto (del superusuario).

Relacionado:¿Cómo chmod sin /usr/bin/chmod?

Hay una propuesta para dar gedit una opción de línea de comandos que hace que el proceso que se invoca sea solo la aplicación de edición real , de modo que gedit sería útil como el editor señalado por el EDITOR variable de entorno (que no es para muchos usos comunes de EDITOR , desde crontab a git , cuando acaba de salir inmediatamente). Esta propuesta aún no se ha hecho realidad.

Mientras tanto, las personas tienen varias formas de tener una segunda instancia simple de un "editor de texto liviano", como invocar una instancia de Desktop Bus completamente nueva, privada para la invocación de gedit , con dbus-run-session . Por supuesto, esto tiende a activar otros servidores GNOME Desktop Bus en este bus privado, ya que a su vez son invocados por gedit , por lo que no es "ligero" en absoluto.

La guinda del pastel es cuando ha seguido esta recomendación o una similar e interpuesto una función de shell llamada gedit que elimina inmediatamente el gedit proceso de la lista de trabajos del shell. El proceso no solo termina rápidamente para que no lo veas más tarde con kill o ps , pero el shell ni siquiera lo supervisa como un trabajo controlado por shell.

Lecturas adicionales

  • Aplicaciones/Gedit/Nueva instancia única. wiki de gnomos. 2013.
  • “Descripción“. GApplication . Wiki de desarrolladores de GNOME.
  • https://stackoverflow.com/questions/7553452/
  • Stefan Löffler (2011-05-04). no reutiliza la instancia en ejecución cuando se inicia desde nautilus. Error #777292. Plataforma de lanzamiento.

Linux
  1. ¿Qué proceso tiene Pid 0?

  2. Descendientes del proceso?

  3. ¿Cómo un proceso en segundo plano conoce su propio Pid?

  4. ¿Cómo calcular el uso de CPU de un proceso por PID en Linux desde C?

  5. Nombre del proceso de su pid en Linux

Cómo matar un proceso o detener un programa en Linux

Cómo matar un proceso en Linux

Comando matar en Linux

Cómo encontrar el nombre del proceso a partir de su PID

Si conozco el número PID de un proceso, ¿cómo puedo obtener su nombre?

¿Cómo obtener el pid de un proceso e invocar kill -9 en el script de shell?