我想知道是否可以从终端执行命令,并且在命令启动后立即将其 PID 发送到另一个要监视的命令。
我需要做这样的事,
dd if=/path/of/file of=/path/of/destination
然后我需要使用 来监视它的执行pidstat
,但是pidstat
需要一个 pid,我不知道如何让一个将 pid 发送给另一个。
我需要监控磁盘使用情况、内存使用情况、CPU 使用情况和经过的时间。有谁知道一种方法可以做到这一点?
答案1
在bash(可能还有其他shell)中,您可以使用shell变量以编程方式捕获最后一个后台进程的PID $!
,即应该可以执行类似的操作
dd if=/path/of/file of=/path/of/destination & pidstat -p $!
答案2
您可以通过在命令末尾添加 & 来完成此操作。
dd if=/path/of/file of=/path/of/destination &
当你执行上面的命令时,它会给你一个pid,你可以使用pid来监控。
测试
cat infinite.sh
#!/bin/bash
while :
do
echo "Press [CTRL+C] to stop.."
sleep 1
done
现在,在第一个终端中,我运行上述命令,如下所示。
-bash-3.2$ ./s.sh &
[1] 25666
-bash-3.2$ Press [CTRL+C] to stop..
Press [CTRL+C] to stop..
Press [CTRL+C] to stop..
Press [CTRL+C] to stop..
现在,我可以打开第二个终端并用来kill -9 25666
停止此过程。在您的情况下,您可以打开第二个终端以dd
使用pid
您在第一个终端中获得的命令来监视命令。