gpt4 book ai didi

bash - 有没有办法中断 shell 命令但继续包含它的管道?

转载 作者:行者123 更新时间:2023-11-29 09:14:02 24 4
gpt4 key购买 nike

考虑以下人为的命令:

cat /dev/urandom | wc -c

如果你运行它,cat永远坐着旋转。如果进程被 ^C 杀死,整个管道将停止并且wc永远不会显示它的计数。在大多数情况下,这是理想且适当的行为。

假设我想停止 cat仍然运行 wc -- 本质上,计算在进程被终止之前经历的字符数。有没有一种很好的方法可以在不切换到另一个 shell 并运行 kill <PID of cat> 的情况下完成它? ?

最佳答案

您可以使用 Ctrl+Z 停止作业:

$ cat /dev/urandom | wc -c
^Z
[1]+ Stopped cat /dev/urandom | wc -c
$

现在您可以获得停止作业中的进程列表并杀死进程领导者(cat,如您在问题中所建议的那样):

$ jobs -l
[1]+ 32164 Stopped cat /dev/urandom
32165

jobs -lp 将只输出组长的 id:

$ jobs -lp
32164

你可以杀死它:

$ kill `jobs -lp`

并继续执行wc:

$ fg
cat /dev/urandom | wc -c
71106560

关于bash - 有没有办法中断 shell 命令但继续包含它的管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com