linux - 如何使用sudo获取运行命令的pid

标签 linux bash shell unix sudo

我正在尝试获取此命令的 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

如果您在脚本中执行此操作,您可能希望在 sudops 之间使用 sleep 1 以确保 child 开始了。

请注意,如果您真的必须对 sudo 使用 -b 标志,这将不起作用,因为这将导致 sudo 执行额外的 fork 并立即退出,从而失去 child 和parent(tcpdump 命令将重新设置为 init),这意味着您将没有简单的方法将子命令与任何其他类似命令区分开来。

关于linux - 如何使用sudo获取运行命令的pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315829/

相关文章:

linux - Awk:- 如何处理 elb-describe-lbs 的文本以仅了解可用区

bash - 在 awk 中使用一个变量,然后将输出输入到另一个变量中

python - 如何在 Azure VM (v1) 上设置全局可见的环境变量

linux - 如何仅列出点文件和点文件夹名称(不包含其中的内容)

shell - 尝试在工作程序上启动执行程序时,Apache Spark shell 崩溃

linux - 在Linux中,用户空间如何不能访问内核空间?

python - wxStaticBitmap 与 wxPtyhon 在 GTK+ 不工作

linux - 如何添加 shell 脚本中包含的标志?

bash - grep'ing 后保留 ls 着色

bash - ls的异常处理