获取后台执行的最后两个命令的 pid 并执行一些操作

获取后台执行的最后两个命令的 pid 并执行一些操作

我写了这个bash:

#!/bin/bash

    eval "(a command) &"
    pid1=$!

    eval "(while kill -0 $pid1; do .... ; done) &"  #It creates file.txt after few seconds
    pid2=$!

    if [ -s /tmp/file.txt ]; then
             for line in $(cat /tmp/file.txt)
                 do
                  sth
                 done

用bash脚本的逻辑:pid1和pid2的值正确吗?

这个脚本运行正确吗?

答案1

我认为您不需要 `eval "(...) &" 语法。只需这样做:

cmd1 &
pid1=$!

cmd2 &
pid2=$!

但除此之外,您的方法在我看来还不错。

例子

$ more ex.bash 
#!/bin/bash

sleep 10 &
pid1=$!

sleep 10 &
pid2=$!

echo "ID1: $pid1 --- ID2: $pid2"

现在当我运行它时:

$ ./ex.bash 
ID1: 27866 --- ID2: 27867

我们可以确认这是正确的:

$ pgrep -l sleep
27866 sleep
27867 sleep

相关内容