请注意,我知道这可能不是最好或最佳的方法,但我以前在某个地方遇到过这个问题,我很好奇答案。
我有一个 perl 脚本,它从一个运行并偶尔死掉的 init 中调用。为了快速调试它,我整理了一个快速包装 perl 脚本,它基本上由
#$path set from library call.
while(1){
system("$path/command.pl " . join(" ",@ARGV) . " >>/var/log/outlog 2>&1");
sleep 30; #Added this one later. See below...
}
从命令行启动它,它运行良好且符合预期。command.pl 被调用,脚本基本上停在那里,直到子进程死亡然后再次运行。
但是,当从启动脚本(实际上是通过 start-stop-daemon)调用时,系统命令会立即返回,让 command.pl 继续运行。然后它又转了一圈。一次又一次。(如果没有 sleep 命令,这并不好玩。)。ps 显示(许多)command.pl 的父级为 1,而不是包装脚本的 id(当我从命令行运行时)。
有谁知道发生了什么?