use*_*909 7 bash process kill pipe
我有一个小脚本来演示我想要做什么
#!/bin/bash
> z
tail -f z | grep 'd' &
echo $!
Run Code Online (Sandbox Code Playgroud)
在$!
给出的grep进程的PID。我希望能够在杀死 grep 进程的同时杀死 tail 进程。这样kill "pid of grep"
做不会杀死尾部进程。也没有killall grep
。我可以使用,killall tail
但我认为这会很危险。
用括号将您的命令括起来:
( tail -f z | grep 'd' ) &
kill -- -$!
Run Code Online (Sandbox Code Playgroud)
这将杀死整个子进程。
在这里,通过指定一个负 PID 来杀死,我们杀死了整个进程组。见man 1 kill
:
负 PID 值可用于选择整个过程组;请参阅 ps 命令输出中的 PGID 列。
或者man 2 kill
:
如果 pid 小于 -1,则将 sig 发送到进程组中 ID 为 -pid 的每个进程。
然而,kill -PID
只会工作,如果作业控制被启用的bash
(默认在交互shell)。否则,您的子进程将没有专用的进程组,并且 kill 命令将失败kill: (-PID) - No such process
要解决此问题,请在bash
( set -m
) 中激活作业控制,或使用pkill -P $!
归档时间: |
|
查看次数: |
5948 次 |
最近记录: |