【发布时间】:2020-04-11 21:57:44
【问题描述】:
我想要做的是,当我的程序收到 SIGSTOP 时,它应该向自己发送 SIGCONT。如果我在终端上做,它可以工作,但我想在我的程序中做。我尝试了类似的方法,但它不起作用..
你能帮帮我吗?
int main()
{
pid_t pid;
pid = fork();
if(pid > 0)
{
int i = 0;
while(1)
{
if(i == 5)
{
kill(getpid(), SIGSTOP);
}
printf("i = %d\n" ,i);
i++;
sleep(1);
}
}
if(pid == 0)
{
while(1)
{
kill(getpid(), SIGCONT);
}
}
return 0 ;
}
【问题讨论】:
-
当您在终端中键入 Control-z 时,它会发送
SIGTSTP,而不是SIGSTOP。 -
“如果我在终端上做”。即使在终端上怎么可能做到这一点?我怀疑您是否真的在这样做,所以请显示您认为可以实现此目的的命令。我认为不可能从终端或以编程方式做你想做的事。来自signal man page:“信号 SIGKILL 和 SIGSTOP 不能被捕获、阻止或忽略”
-
我运行程序,在我找到终端上的进程ID后, kill -SIGSTOP 5014 ,然后程序停止.. 在我写完 kill -SIGCONT 5014 并继续。
-
嗯,这不是发送给自己的过程,是吗?另一个进程,shell,正在发送到停止的进程。所以这与您的问题似乎完全不同。
-
是的,我在问它如何发送给自己。
标签: c signals signal-handling