Debe guardar el PID del proceso en segundo plano en el momento de iniciarlo:
foo &
FOO_PID=$!
# do other stuff
kill $FOO_PID
No puede usar el control de trabajos, ya que es una función interactiva y está vinculada a una terminal de control. Una secuencia de comandos no necesariamente tendrá un terminal adjunto, por lo que el control del trabajo no estará necesariamente disponible.
Puedes usar el jobs -l
comando para llegar a un trabajo en particularL
^Z
[1]+ Stopped guard
my_mac:workspace r$ jobs -l
[1]+ 46841 Suspended: 18 guard
En este caso, 46841 es el PID.
Desde help jobs
:
-l Informe el ID del grupo de procesos y el directorio de trabajo de los trabajos.
jobs -p
es otra opción que muestra solo los PID.
$$
es el pid del script actual$!
es el pid del último proceso en segundo plano
Aquí hay una transcripción de muestra de una sesión de bash (%1
se refiere al número ordinal del proceso en segundo plano visto desde jobs
):
$ echo $$
3748
$ sleep 100 &
[1] 192
$ echo $!
192
$ kill %1
[1]+ Terminated sleep 100