bash中是否有任何内置功能可以等待任何进程完成?该wait命令仅允许等待子进程完成.我想知道在继续执行任何脚本之前是否有任何方法可以等待任何进程完成.
这样做的机械方法如下,但我想知道bash中是否有任何内置功能.
while ps -p `cat $PID_FILE` > /dev/null; do sleep 1; done
Run Code Online (Sandbox Code Playgroud) 我正在使用GO检查一个进程(不是父进程)是否已经终止,基本上类似于FreeBSD中的pwait命令但是用go编写.
目前,我尝试了for loop一个kill -0,但我注意到,CPU的使用率是非常高的99%,使用这种方法,这里是代码:
package main
import (
"fmt"
"os"
"strconv"
"syscall"
"time"
)
func main() {
if len(os.Args) != 2 {
fmt.Printf("usage: %s pid", os.Args[0])
os.Exit(1)
}
pid, err := strconv.ParseInt(os.Args[1], 10, 64)
if err != nil {
panic(err)
}
process, err := os.FindProcess(int(pid))
err = process.Signal(syscall.Signal(0))
for err == nil {
err = process.Signal(syscall.Signal(0))
time.Sleep(500 * time.Millisecond)
}
fmt.Println(err)
}
Run Code Online (Sandbox Code Playgroud)
知道如何改进或正确实现这一点.
提前致谢.
UPDATE
sleep像建议的那样在循环内添加,有助于减少负载.
从提供的链接,似乎可以附加到现有的pid,我会尝试 …
使用c当我不是当前进程的子进程时,如何等待PID X退出?
Kill(pid, SIGTERM);
waitpid(pid,NULL,0);
Run Code Online (Sandbox Code Playgroud)
以上不起作用,因为'pid'不是子进程.
我在远程计算机上运行了一个不应停止的程序。我需要跟踪该程序何时停止并立即执行命令。PID 是已知的。我怎样才能做到这一点?