5

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

nohup perl myPerlSCript.pl >debug_log &

几分钟后,我的状态为

[1]+ 已停止

我没想到它会停止,我也不知道是什么停止了它。我该如何调试它并找出它停止的原因?我实际上有兴趣了解要调试的 unix 命令。

4

2 回答 2

3

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

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP很严重。它是不可阻挡、不可忽视、不可处理的。SIGKILL它会像杀死它一样肯定会停止该过程。其他的可以由后台进程处理以防止停止。

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

这个列表可能非常不完整。

于 2012-07-04T00:01:17.477 回答
1

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

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

于 2012-05-14T17:45:00.297 回答