【问题标题】:How can I wait until specified "xterm" finished?我怎样才能等到指定的“xterm”完成?
【发布时间】:2013-08-07 11:04:28
【问题描述】:

在我的 c-shell 文件中,我做了类似的事情:

xterm -e "源 xxxx0" &

xterm -e "源 xxxx1" &

等待

代码....

“wait”之后的代码会在两个xterm完成后执行。

但这也带来了问题。如果我打开了一些 ps,例如 geditn 打开的 txt 文件,或者我打开了 eclipse,它会挂在那里,因为“wait”正在等待所有作业完成。

那么我怎样才能让“等待”只等待这两个 xterm 作业。

或者换句话说,我希望这两个“xterm”同时运行。在他们都完成之后,代码可以继续。我该怎么做?

非常感谢

【问题讨论】:

标签: c linux bash shell


【解决方案1】:

告诉wait它应该等待的进程ID:

xterm ... &
pid1=$!

xterm ... &
pid2=$!

wait $pid1 $pid2

假设您使用 wait 支持多个参数(bash、zsh、...)的 shell。如果你使用 sh 来实现可移植性,那么你必须做两次等待:

wait $pid1
wait $pid2

这将等到两者都完成。如果第二个在第一个之前完成,等待将立即返回。

【讨论】:

  • 嗨@ahilsend,我发现如果我直接使用PID号,它可以工作,比如:wait $20234 如果我保存这个数字,比如:sleep 20 & set pid1=$!睡眠 30 并设置 pid2=$!等待 $pid1 $pid2 它说等待:参数太多
  • bash 支持等待多个 pid。你在用sh吗?如果它不必非常便携,那么请更改为 bash。否则执行两个命令:wait $pid1; wait $pid2;这将等到两个都完成。如果第二个在第一个之前完成,它会给你一个消息,它不是一个孩子,但会立即返回。
  • 好吧,我使用的是 C Shell。因为这对我有用:等待 $20234(20234 是我从控制台获得的睡眠 30 的 PID)好吧,当我像“pid1 = $! "我想我应该使用 "wait $($pid1)" 但是 $($pid1) 是不允许的,应该很容易做到吧?
  • 等 $19601 $19602 对我来说也很好。
  • 我明白了,从未使用过 c shell。在这种情况下,请尝试 \$$pid1。
猜你喜欢
  • 2011-12-14
  • 2016-05-19
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多