Unix后台进程异常停止

时间:2012-05-14 17:37:42

标签: unix process background nohup

我使用以下命令在后台执行了一个perl脚本

nohup perl myPerlSCript.pl >debug_log &

几分钟后,我获得了

的状态
  

[1] +停止

我没想到它会停止,也不知道是什么阻止了它。我该如何调试它并找出它停止的原因?我真的很想知道要调试的unix命令。

2 个答案:

答案 0 :(得分:3)

有几种方法可以停止在后台运行的进程。所有这些都涉及以下信号之一:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP很严重。它是不可阻挡的,不可忽视的,不可操作的。它肯定会停止这个过程,因为SIGKILL会杀死它。其他可以由后台进程处理,以防止停止。

  • 其他流程使用kill(2)发送信号,或使用raise(3)kill(2)
  • 将流程发送给自身
  • 进程尝试写入终端,并启用终端选项tostop(请参阅stty -a的输出)。这会生成SIGTTOU
  • 此过程尝试使用tcsetattr(3)或等效的ioctl更改终端模式。 (这些是stty显示的相同模式。)无论SIGTTOU标志的当前状态如何,都会生成tostop
  • 该过程试图从终端读取。这会生成SIGTTIN

此列表可能非常不完整。

答案 1 :(得分:1)

您是否有机会使用tcsh? Tcsh实际上带有一个内置的nohup命令,我之前遇到过很多问题,看到你看到的确切行为。

如果是这种情况,请尝试直接使用/usr/bin/nohup