У меня есть программа, которая регулярно разветвляет и запускает другие программы. Иногда программы, которые он запускает, застревают в своей обработке, и кажется, что новые программы никогда не начинают обработку. В конце концов мы убиваем кучу застрявших программ и перезапускаем программу, которая их разветвляет / запускает, и проблема, похоже, решается. Вывод ps старых / зависших программ (до уничтожения) и новых / рабочих (после перезапуска) программ различается. Что мы можем интерпретировать из разницы между "-ksh -c" и процессом perl (pid 6212)? Они вызывались точно так же; почему вывод ps отличается? Может быть, у нас заканчивается какой-то ресурс? Виртуальные терминалы?
[me@unixbox1:~]> ps -ef | grep app_bld_rfh2
appadm 23926 1 0 14:19:34 ? 0:00 -ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
me 9232 5237 0 14:38:09 pts/28 0:00 grep app_bld_rfh2
appadm 2975 1 0 14:30:04 ? 0:00 -ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
appadm 17697 1 0 14:14:31 ? 0:00 -ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
appadm 11820 1 0 14:09:30 ? 0:00 -ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
appadm 29658 1 0 14:25:00 ? 0:00 -ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
appadm 6212 1 1 14:35:15 pts/2 0:47 /usr/local/bin/perl /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
Вы получаете -ksh
когда он вызывается как оболочка входа в систему, и я предполагаю, что ваш скрипт perl /home2/app/eai/app_bld_rfh2.pl
начинается с линии
#!/usr/local/bin/perl
или
#!/usr/bin/env perl
Вызов ksh -c /home2/app/eai/app_bld_rfh2.pl APP.DOC.SERVICE
в свою очередь выполнит perl
на основании вышеизложенного хэш-бэнг. В этом причина разницы.
Что касается того, почему он зависает, я предполагаю, что ему нужен псевдо-tty для запуска, поэтому, если вы запустите его через ssh
использовать -t
опция принудительного выделения псевдо-tty.