当前位置: 首页 > 面试题库 >

Linux进程在后台-作业“停止”了吗?

洪祺
2023-03-14
问题内容

我当前正在运行带有&标志的进程。

$ example &

但是,(请注意,我是Linux的新手)我意识到,在执行此命令后几乎一秒钟,我就收到一条消息,指出我的进程收到了停止的信号。如果我做

$ jobs

我将在示例过程中获得列表,并带有一个小注释“ Stopped”。它真的停止了并且在后台根本不工作吗?它是如何工作的?我从互联网上得到的信息不一。


问题答案:

在Linux和其他Unix系统中,正在后台运行但仍与其stdin(或std::cin)与其控制终端(也就是运行它的窗口)相关联的作业将被发送SIGTTIN信号,默认情况下,该程序会完全停止,等待用户将其带到前台(fg %job或类似位置)以允许将输入实际提供给程序。为避免程序被这种方式暂停,您可以:

  1. 通过将程序stdin通道重定向到具有适当内容以供程序输入的文件,或者将其重定向到/dev/null确实不需要输入的文件(例如),以确保程序通道不再与终端关联myprogram < /dev/null &
  2. 启动程序后退出终端,这将导致与程序的关联stdin消失。但这将导致将a SIGHUP传递给程序(这意味着输入/输出通道经历了“挂断”)-这通常会导致程序终止,但这可以通过使用nohup-例如来避免nohup myprogram &

如果您对捕获程序的输出完全感兴趣,那么这可能是最好的选择,因为它可以防止上述两个信号(以及其他两个信号),并保存输出以供您确定是否程序执行有任何问题:

nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &


 类似资料:
  • 问题内容: 我正在通过SSH(Putty)在Linux机器上工作。我需要让一个进程在夜间运行,所以我想可以通过在后台启动该进程(在命令末尾使用&号)并将stdout重定向到文件来实现。 令我惊讶的是,这行不通。一旦关闭“腻子”窗口,该过程就会停止。 如何防止这种情况发生? 问题答案: 检出“ nohup ”程序。

  • 我有一个作业调度bash外壳脚本,其中包含以下代码: 我在后台运行这样的脚本: 我想用 kill -9 终止此调度程序进程。但是我第一次没有记录调度程序进程的 pid。相反,我使用作业来显示所有过程,但它什么也不显示。即使这个fg也不能将这个过程带到前台。 但是我认为这个调度程序进程仍然在运行,因为它仍然在继续分配java程序运行。我应该如何终止这个作业调度程序bash外壳脚本进程? 编辑:我使用

  • 在我的一个活动中,有一个使用mediaPlayer播放音乐的按钮。它还可以选择在后台播放音乐,或者在活动结束时停止。 我用这个代码。 这很好用。现在的问题是,当用户返回活动并按下播放按钮时,它会启动一个新的mediaPlayer并播放新的音乐。当新音乐开始播放时,我想在后台停止播放以前的音乐。 这是我的代码 以及MediaPlayer声明 在创建之前

  • 我正在尝试在后台运行作业,允许我根据某种条件或在超时发生后停止它。 我有这两块代码:

  • 问题内容: 我有一个VirtualBox进程挂起,试图杀死(/ )但没有成功。父pid为1(初始值)。 显示了记录为“不间断睡眠”的过程。 什么都不显示。 我该如何摆脱呢?它阻止我卸载VirtualBox内核驱动程序以加载较新的驱动程序。 问题答案: 简单的答案:您不能。 更长的答案:不间断的睡眠意味着该过程不会被信号唤醒。它只能被等待的东西唤醒。当我遇到这种情况时。使用CD-ROM时,我通常使用