Unix后台进程异常停止

标签 unix process background nohup

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

nohup perl myPerlSCript.pl >debug_log &

几分钟后,我的状态为

[1]+ Stopped



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

最佳答案

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

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN
  • SIGSTOP很严重。它是不可阻挡的、不可忽视的、不可处理的。它会像 SIGKILL 一样确定地停止进程会杀了它。其他的可以由后台进程处理以防止停止。
  • 另一个进程使用 kill(2) 发送了一个信号,或者通过进程使用 raise(3)kill(2)
  • 进程试图写入终端,终端选项 tostop已启用(请参阅 stty -a 的输出)。这会生成 SIGTTOU .
  • 该进程尝试使用 tcsetattr(3) 更改终端模式或等效的 ioctl . (这些模式与 stty 显示的模式相同。)这将生成 SIGTTOU无论 tostop 的当前状态如何旗帜。
  • 该进程试图从终端读取。这会生成 SIGTTIN .

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

    关于Unix后台进程异常停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10588334/

    相关文章:

    linux - 显示不带小写字母的输出

    linux - 在 www 中创建用于下载 CentOS 的临时目录

    C++ Windows CreateChildProcess - 隐藏/不显示子进程的控制台窗口

    c++ - 堆栈限制和线程之间的关系

    linux - SSH 到远程服务器

    java - TextField "umlauts"在 linux 上没有显示

    php - 使用 PHP 列出服务器上所有正在运行的进程

    android - 如何重复图像的某些部分

    css - 如何设置<li>背景颜色?

    c# - 在 .NET 中运行线程操作时如何响应事件