向后台进程发送信号

3 c linux signals

我应该将哪个信号发送到后台进程以将其移至前台?SIGTTIN,SIGTOU还是......?

pax*_*blo 17

这不是直接控制作业是前景还是背景的信号.这些工作都在shell(通常)的控制之下.

例如,bash如果你执行:

pax> sleep 3600 &
pax> jobs
Run Code Online (Sandbox Code Playgroud)

你会看到如下输出:

[1]+  Running                 sleep 3600 &
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令将该作业恢复到前台:

pax> fg %1
sleep 3600
Run Code Online (Sandbox Code Playgroud)

(终端等).

使用CTRLZ 确实向进程(SIGSTOP)发送信号并将其放入后台,但唯一可以改变的信号是SIGCONT(继续):

pax> fg %1
sleep 3600
^Z
[1]+  Stopped                 sleep 3600
pax> jobs
[1]+  Stopped                 sleep 3600
pax> kill -CONT %1
pax> jobs
[1]+  Running                 sleep 3600 &
Run Code Online (Sandbox Code Playgroud)

这将指示进程再次开始运行,但它不会将其置于前台.为此,您需要fg命令.

最好分别考虑信号(影响过程)和前景/后台(它通过确定是否等待它来影响启动过程的shell).

  • 没有一个.干净利落.前景/后台不是进程的属性,它是启动进程的*shell*的属性.shell控制那个方面.您可以发送SIGCONT以启动进程运行(如果它已使用SIGSTOP停止),但没有信号允许进程强制进入前台,因为它根本没有该功能. (3认同)
  • @gurudoglu - 这就像试图打电话给电视广播员并要求他们打开你的电视.这没有数字.幸好... (2认同)

小智 7

gurudoglu.我认为您的请求的回复在这里:

  • 这些信号都不会将进程移动到前台.SIGCONT将导致进程在SIGSTOP绑定后恢复.SIGTT只是在后台尝试读取或写入时简单地传送到进程.它们不会*前进过程,事实上它们的默认操作就是简单地停止进程,就好像你发送了一个SIGSTOP一样.您仍然需要SIGCONT让它们继续在后台运行,或者从shell中fg它们将它们带到前台. (2认同)