我有一个程序,它定期派生并执行其他程序。有时,它启动的程序在处理过程中会卡住,而新程序似乎永远无法开始处理。我们最终杀死了一堆卡住的程序,并重新启动派生/执行它们的程序,问题似乎就解决了。旧的/卡住的程序(杀死前)和新的/正在运行的程序(重新启动后)的 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
答案1
当它作为登录 shell 调用时,你会看到-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分配来启动它。