Я запускаю фоновый процесс со своего сценария оболочки, и я хотел бы уничтожить этот процесс, когда мой сценарий заканчивается.
Как получить PID этого процесса из моего сценария оболочки? Насколько я вижу переменную $!
содержит PID текущего сценария, не фоновый процесс.
Вам необходимо сохранить PID фонового процесса в момент его запуска:
foo &
FOO_PID=$!
# do other stuff
kill $FOO_PID
Вы не можете использовать управление заданиями, так как это интерактивная функция, привязанная к управляющему терминалу. К сценарию совсем не обязательно должен быть подключен терминал, поэтому управление заданиями не обязательно будет доступно.
Вы можете использовать команду jobs -l
, чтобы перейти к конкретному заданиюL
^Z
[1]+ Stopped guard
my_mac:workspace r$ jobs -l
[1]+ 46841 Suspended: 18 guard
В этом случае 46841 - это PID.
From help jobs
:
-l Сообщает идентификатор группы процессов и рабочий каталог заданий.
jobs -p
- еще одна опция, которая показывает только PID.
$$
- это pid текущего скрипта $!
- это pid последнего фонового процесса Вот пример записи из сеанса bash (% 1
относится к порядковому номеру фонового процесса, как видно из заданий
):
$ echo $$
3748
$ sleep 100 &
[1] 192
$ echo $!
192
$ kill %1
[1]+ Terminated sleep 100