Solaris ps输出解释

我有一个计划,定期分叉和执行其他程序。 有时,它开始的程序卡在他们的处理和新程序似乎从来没有开始处理。 我们最终杀了一堆卡住的程序,并重新启动程序,分叉/执行他们,这个问题似乎清除了。 旧/卡住程序(预杀)和新/工作(重启后)程序的ps输出是不同的。 我们可以从“-ksh -c”和perl进程(pid 6212)之间的区别来解释吗? 他们以完全相同的方式被援引; 为什么ps输出不同? 我们可能会耗尽一些资源吗? 虚拟terminal?

[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 

当它被作为loginshell调用时,你会得到-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将依次执行基于上述hash-bang的 perl 。 这是差异的原因。

至于为什么它挂起,我的猜测是它需要一个伪tty运行,所以如果你通过ssh启动,使用-t选项来强制伪tty分配。