【问题标题】:how to know if a process which run in the background finished or not如何知道在后台运行的进程是否完成
【发布时间】:2013-11-18 08:43:22
【问题描述】:

我用 C 编写了一个基本的 shell,用于执行基本命令,如 ls 、 pwd 、 ...
我有一个功能可以让进程在后台运行,而不是等到它完成,例如:ls & 而不是 ls(我有一个列表,其中包含现在在后台运行的进程)
整个事情是我想知道一个过程何时完成,所以我可以将它从列表中删除。
谢谢

【问题讨论】:

  • 肯定有几十个,如果不是更多免费可用的 shell 示例可以做到这一点……也许你应该只搜索其中一个并阅读它的源代码?
  • 你有具体的吗?
  • stackoverflow.com/questions/642775/… 似乎有希望。编辑:它们实际上可能对您的需要来说太简单了,但是找到任何支持后台任务的简单 shell 都可能满足您的需要。

标签: c process operating-system execv


【解决方案1】:

当子进程终止时,SIGCHLD 信号被发送给父进程。带有WNOHANG 标志的waitpid 函数可用于检查子进程是否已终止或仍在运行。您可能希望将这两种方法结合起来。

【讨论】:

  • 非常感谢,它现在可以工作了WNOHANG);
  • 我不明白的是,我们如何等待一个进程刚刚发送了一个表明它已经完成的信号!
  • 不是进程发送信号,而是内核代表终止进程发送信号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2015-01-05
  • 2011-05-02
相关资源
最近更新 更多