Yo empecé
while true; do yad; sleep 60; done &
y cerré la terminal para probarlo, ahora tengo el mismo problema.
Si ya cerró la terminal, ha comenzado el ciclo
Vamos a obtener una visión general de los procesos en ejecución con ps fjx
, las últimas líneas en mi máquina leen
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
Puede ver yad
como un subproceso de /bin/bash
, si lo cierro yad
cambia a sleep 60
la salida de ps
. Si la vista de árbol es demasiado confusa, también puede buscar la salida de la siguiente manera 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Las líneas de salida comienzan con dos números, el primero es el PPID, el ID del proceso principal y el segundo es el PID, el ID del proceso en sí. Es por eso que 9411
aparece en ambas filas aquí:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Esa es la bash
subshell que queremos matar y acabamos de descubrir su PID, así que ahora todo lo que queda es un simple
kill 9411 # replace 9411 with the PID you found out!
y la molesta subshell se ha ido para siempre.
1 : La notación como en grep "[y]ad"
lugar de simplemente grep yad
evita que el grep
proceso en sí aparezca en la lista de resultados.
Si todavía tienes la terminal abierta
bash
proporciona la variable $!
, que "se expande al ID de proceso del trabajo colocado más recientemente en segundo plano", por lo que lo siguiente simplemente elimina el último proceso en segundo plano:
kill $!
Si es que no el último proceso, solo se puede obtener una lista de puestos de trabajo que se ejecuta con la jobs
orden interna, salida de ejemplo:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Hay dos trabajos en la lista de trabajos, para eliminar uno de ellos puede acceder con el número de trabajo o los accesos directos %
, %+
("trabajo actual") y %-
("trabajo anterior"), por ejemplo, para eliminar el bucle que se está ejecutando en segundo plano. podría hacer
kill %1 # or
kill %-
y para matar el sleep 10
trabajo suspendido :
kill %2 # or
kill %+ # or
kill %
top
para matar el proceso presionandok
, luego ingresando el PID, luego presionando enter dos veces.Esto
&
hará que el terminal cree un nuevo proceso y haga que su código se ejecute dentro de él. Entonces su código se vuelve independiente del proceso terminal. Incluso si cierra la terminal, el nuevo proceso en el que se está ejecutando su código no se detendrá. Entonces, elimine&
o hagaps -aux
, ubique su proceso y elimínelokill (process id)
.fuente
Generalmente bg para fondo fg para primer plano. Si usa & symbol use fg, se mostrará el programa en ejecución actual. Presione Ctrl + C para matar.
fuente
bg
/fg
no funcionará una vez que se desconecte el terminalbash
. No podría volver a adjuntar usandoreptyr
porquebash
tiene procesos secundarios (sleep
).