【问题标题】:How to implement running commands in the background by supporting ‘&’ and wait (for UNIX Shell)?如何通过支持'&'和等待来实现后台运行命令(对于UNIX Shell)?
【发布时间】:2021-12-15 22:54:16
【问题描述】:

所以我的理解是,如果您使用“&”终止命令,它将在后台运行该进程。如果两个命令用“&”分隔,它们将同时运行。 例如command1 & command2 //同时运行 为了实现这一点,我会让 shell fork 一个子进程并让子进程执行第一个命令 I. 背景。父进程不会等待,而是并行执行第二个命令。 这是正确的方法吗?我该如何应用它来支持 wait()?

【问题讨论】:

  • 这是正确的方法吗”。听起来是正确的,或者至少是一种没有具体细节的合理的一般方法。 “suppory wait”到底是什么意思?什么命令会在你的 shell 中触发它,然后会有什么行为?但是问题并不适合 Stack Overflow,因为它过于模糊和开放式。最好显示一些代码并提出一个具体的问题。请查看How to Ask
  • 您可能想要阅读或刷新关于信号处理的内容。尤其是SIGCHLD 信号。
  • 研究开源 shell 的源代码,例如 GNU bashzshfish ... 另见 RefPerSys 然后通过电子邮件与我联系到法国巴黎附近的 basile@starynkevitch.net

标签: c linux shell unix operating-system


【解决方案1】:

这是在通用 unix 上使用 bash:

BigMac:tmp steve$ sleep 10 & sleep 13 & sleep 20 &
[1] 69168
[2] 69169
[3] 69170
BigMac:tmp steve$ wait %1; wait 69169; kill %3
[1]   Done                    sleep 10
[2]-  Done                    sleep 13
[3]+  Terminated: 15          sleep 20

第一行启动三个独立的睡眠。 shell 为他们分配工作编号[1], [2], [3];而系统为它们分配进程ID 69178,69169,69170 resp。命令waitkill 可以采用任一标识符,如第二行所示。

第二行等待第一个作业% indicates to the shell that the following number is in its naming scheme,然后等待第二个进程the lack of % indicates a process identifier,然后终止第三个作业。

这样一个简单的例子能传达的内容远不止于此;特别是 job 的概念比这个例子所描述的要复杂得多。

The UNIX Programming EnvironmentISBN 尽管已经近 40 岁,但对 UNIX 如何以及为何以它的方式工作有一个很好的基本理解。还有更多现代、详细和系统特定的作品。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2015-06-09
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多