-SIGCONT 不继续暂停的进程?

发布于 2024-12-26 07:49:29 字数 267 浏览 1 评论 0 原文

从另一个终端运行 kill -SIGCONT pid 后,以下进程不会继续。

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("paused\n");
    pause();
    printf("continue\n");

    return 0;
}

我希望程序在发送信号并打印“继续”后继续。为什么这没有按预期工作?

The following process does not continue after running kill -SIGCONT pid from another terminal.

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("paused\n");
    pause();
    printf("continue\n");

    return 0;
}

I expect the program to continue after sending the signal and printing "continue". How come this doesn't work as expected?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

话少情深 2025-01-02 07:49:29

pause() 记录为

导致调用进程(或线程)休眠,直到发出终止进程或导致
信号捕获函数的调用。

但是 SIGCONT 只会继续之前由 SIGSTOP 或 SIGTSTP 停止的进程。

因此,您可能想尝试:

 kill(getpid(), SIGSTOP);

而不是 pause()

另外,您可能想看看 sigsuspend()

pause() is documented to

cause the calling process (or thread) to sleep until a signal is delivered that either terminates the process or causes
the invocation of a signal-catching function.

But SIGCONT only continues a process previously stopped by SIGSTOP or SIGTSTP.

So, you might want to try:

 kill(getpid(), SIGSTOP);

Instead of your pause()

Also, you might want to look at sigsuspend().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文