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

Интерпретация вывода Solaris ps

У меня есть программа, которая регулярно разветвляет и запускает другие программы. Иногда программы, которые он запускает, застревают в своей обработке, и кажется, что новые программы никогда не начинают обработку. В конце концов мы убиваем кучу застрявших программ и перезапускаем программу, которая их разветвляет / запускает, и проблема, похоже, решается. Вывод 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.