centos-后台进程

centos-后台进程

我有一台机器,在 wifi 接口上运行 tcpdump 需要 sudo 权限。所以如果我运行像这样的后台作业,

sudo tcpdump -i wlp8s0 'port 80' &

(我知道这样做毫无意义,因为我没有得到任何输出,但让我们考虑一下)

因此,当我必须杀死一个以非 root 用户范围启动的后台进程时,我通常会这样做,

Kill %1 ###1 是后台作业号

但这表示不允许操作。

那么我就这样做,

须藤杀死%1

但这就像它必须终止由 root 用户启动的后台作业一样(事实并非如此)。

我必须实际获取该作业的进程 ID 并用它来杀死它。

关于如何使用非 root 用户在 sudo 范围内启动作业并正常终止它而不是残酷地终止它,有什么想法吗?

答案1

您可以使用

sudo kill "$!"

杀死最近启动的后台作业。

如果你开始工作时会更容易

sudo tcpdump ... & pid="$!"

然后

sudo kill "$pid"

会杀死特定的工作。

sudo进程本身会像您一样运行,但它会将所有信号转发给子进程(tcpdump在本例中),这意味着您必须拥有适当的权限来向其发出信号才能杀死它。

sudo手册(在 Ubuntu 系统上):

如果配置了 I/O 日志记录插件或者安全策略明确请求它,则会创建一个新的伪终端(“pty”),并使用第二个 sudo 进程在用户现有 pty 和新 pty 之间中继作业控制信号pty 正在运行该命令。这个额外的过程使得可以暂停和恢复该命令。

[...]

当该命令作为 sudo 进程的子进程运行时,sudo 会将其收到的信号中继到该命令。 SIGINT 和 SIGQUIT 信号仅在命令在新 pty 中运行时或信号由用户进程而不是内核发送时才会转发。

相关内容