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