【问题标题】:pausing a child process and resuming it from the parent暂停子进程并从父进程恢复
【发布时间】:2022-01-06 23:09:17
【问题描述】:

除了理论之外,几乎不知道信号是如何工作的。我正在编写一个程序,需要子进程启动,暂停,等待父进程发送信号,然后父进程运行它的代码部分,发送信号,等待子进程完成,然后孩子继续并继续过去 pause();并完成,以便父母可以继续,因此它也可以完成。 我尝试过 kill(c_pid, SIGCONT),但程序只是挂起,因为子进程永远不会取消暂停,并且父进程正在等待子进程完成。 我是否需要放置一个 void 函数来检查信号,在 pause() 之前写一个人; ?

【问题讨论】:

  • 我对“等待父进程启动”感到困惑 - 除了按定义必须已经运行的父进程之外,是什么启动了这个“子”进程?还是您的意思是“等待父进程恢复”?
  • @WhozCraig 我的错,我的意思是等待父进程发送信号以使其恢复。我已经编辑了帖子以更好地措辞。

标签: c forms signals kill pause


【解决方案1】:

子进程永远不会取消暂停,父进程正在等待子进程完成。我是否需要放置一个 void 函数来检查信号,在 pause() 之前写一个人; ?

根据其文档,pause()

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

(已添加重点。)

所以是的,如果您希望孩子从pause() 恢复,那么您必须确保收到父母的信号会导致调用信号捕获函数(也称为“信号处理程序”)。这需要在pause()ing 之前通过signal() 或(更好的)sigaction() 函数为该信号注册这样的处理程序。信号处理程序的签名将是void some_name(int),所以可能这就是您的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2021-12-19
    相关资源
    最近更新 更多