我正在尝试获取此命令的 pid。
sudo -b tcpdump -i eth0 port 80 -w eth0.pcap
最佳答案
您可以使用 $!
获取最后一个后台进程的 pid(在本例中为 sudo),并使用 ps --ppid
找出关于它的 child 。例如:
$ sudo tcpdump -i eth0 port 80 -w eth0.pcap &
$ ps --ppid $! -o pid=
16772
$ ps --pid 16772
PID TTY TIME CMD
16772 pts/3 00:00:00 tcpdump
如果您在脚本中执行此操作,您可能希望在 sudo
和 ps
之间使用 sleep 1
以确保 child 开始了。
请注意,如果您真的必须对 sudo 使用 -b
标志,这将不起作用,因为这将导致 sudo 执行额外的 fork 并立即退出,从而失去 child 和parent(tcpdump 命令将重新设置为 init),这意味着您将没有简单的方法将子命令与任何其他类似命令区分开来。
关于linux - 如何使用sudo获取运行命令的pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315829/