PID дочернего процесса bash (imapsync) - как его получить?
Может ли кто-нибудь сказать мне, как получить PID команды, выполняемой в Bash.
Например, у меня есть скрипт bash, который запускает imapsync.
Когда сценарий завершается, процесс imapsync не всегда завершается, поэтому я хотел бы иметь возможность идентифицировать PID imapsync программно из моего сценария, чтобы я мог сам завершить процесс imapsync в обработчике сигналов.
Итак, как мне программно получить PID дочернего процесса из родительского сценария bash?
4 ответа
imapsync имеет возможность установить, где написан его pid:
--pidfile: файл, в который записан pid imapsync.
any_command args &
my_child_PID=$!
IOW, так же, как $$
держит ваш PID, $!
имеет PID последней выполненной фоновой команды.
В отличие от pidof
, pgrep
может быть предоставлено множество опций для ограничения, для каких процессов он возвращает PID. Один из них, который может быть особенно полезным, - это выбор на основе PPID с использованием PID текущего процесса.
pgrep -P $$ imapsync
который будет выводить только PID imapsync, если они являются дочерними элементами вашего скрипта.
Как насчет того, чтобы на мгновение поставить imapsync на задний план, получить PID, а затем поставить его на первый план... Примерно так:
imapsync &
pid=$!
wait $pid
retVal=$?