Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在bash中,只杀死管道中的第一个进程_Linux_Bash - Fatal编程技术网

Linux 在bash中,只杀死管道中的第一个进程

Linux 在bash中,只杀死管道中的第一个进程,linux,bash,Linux,Bash,如果我有一个长时间运行的命令,定期输出一些数据,例如我想用awk(或其他东西)处理的tail-F: 如何仅终止第一个进程(本例中为tail),以便在awk中看到END{}块的结果?如果我按下Control+C,整个管道将停止 我发现的一种工作方式是打开一个单独的选项卡/术语窗口,第一个进程的grep PID,然后从那里杀死它,但这似乎相当笨拙,有没有其他解决方案?可能是这样的 tail -F service.log | (trap '' INT; awk '{ ... } END { print

如果我有一个长时间运行的命令,定期输出一些数据,例如我想用awk(或其他东西)处理的
tail-F

如何仅终止第一个进程(本例中为tail),以便在awk中看到
END{}
块的结果?如果我按下Control+C,整个管道将停止


我发现的一种工作方式是打开一个单独的选项卡/术语窗口,第一个进程的grep PID,然后从那里杀死它,但这似乎相当笨拙,有没有其他解决方案?

可能是这样的

tail -F service.log | (trap '' INT; awk '{ ... } END { print ...}')

你仍然可以用SIGHUP杀死它,或者在最坏的情况下用SIGKILL杀死它。无论如何,在这个有限的场景中,当它从管道中获得EOF时,它将终止。
tail -F service.log | (trap '' INT; awk '{ ... } END { print ...}')