Назад | Перейти на главную страницу

PID дочернего процесса bash (imapsync) - как его получить?

Может ли кто-нибудь сказать мне, как получить 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=$?