У меня есть задание cron, которое запускает скрипт оболочки каждые 8 часов, что в свою очередь вызывает кучу программ. Иногда эти программы не заканчиваются изящно, и они застревают в подвешенном состоянии.Найти pid каждого процесса, вызванного в сценарии оболочки
Так что, если мой cron'd скрипт (run_foo_bar.sh
) выглядит следующим образом:
python foo.py
python bar.py
... Я мог бы иметь несколько Foo-х и бар, работающие одновременно. Прямо сейчас я получаю участие PID, делая ps -ax |grep foo
, а затем нахожу runtime, используя ps -p $PID -o etime=
, но это становится громоздким.
В программах python на консоль печатаются кучи операторов отладки, и сам сценарий оболочки передается по протоколу в файлы журнала. Я хотел бы найти способ, который бы вторит PID каждого процесса, как только он вызывается вместе с временем вызова, так что мой run_foo_bar.sh будет выглядеть следующим образом:
date
python foo.py
<some magic to find PID>
echo foo.py is running as PID $PID
date
python bar.py
<some magic to find PID>
echo bar.py is running as PID $PID
Вы не можете добавить что-то в код python, чтобы он мог сам сообщить свой PID и поместить его на std-out? Удачи. – shellter
Возможно [это] (https://stackoverflow.com/a/13202292/2877364)? – cxw
В настоящее время 'python foo.py' будет работать до выхода' foo.py', после чего не будет найден PID. Не могли бы вы пояснить? Ли 'foo.py' переводит себя на задний план или что-то в этом роде? Откуда вы знаете, когда процесс «застрял в подвешенном состоянии»? – cxw