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=$?
Другие вопросы по тегам