Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Bash 用父母来杀死睡眠';s PID不在循环中工作_Bash_Loops_Sleep_Pid_Kill - Fatal编程技术网

Bash 用父母来杀死睡眠';s PID不在循环中工作

Bash 用父母来杀死睡眠';s PID不在循环中工作,bash,loops,sleep,pid,kill,Bash,Loops,Sleep,Pid,Kill,我有一个文件如下所示: #!/bin/bash echo $$ > pid while true; do echo "something" sleep 10s done | lemonbar pkill -P $(cat pid) -f "sleep 10s" 我想通过这样的功能来消除睡眠: #!/bin/bash echo $$ > pid while true; do echo "something" sleep 10s done |

我有一个文件如下所示:

#!/bin/bash

echo $$ > pid

while true; do
    echo "something"
    sleep 10s
done | lemonbar
pkill -P $(cat pid) -f "sleep 10s"
我想通过这样的功能来消除睡眠:

#!/bin/bash

echo $$ > pid

while true; do
    echo "something"
    sleep 10s
done | lemonbar
pkill -P $(cat pid) -f "sleep 10s"

如果我将sleep移出循环,上面的命令会起作用,但是在循环中它什么也不做。我遗漏了什么?

Bash循环在孩子的时候启动新的进程id。shell变量$PPID应表示父PID。然而,我也读了你之前的问题,我认为更好的问题应该是你真正想要完成什么?所有这些都有股骇人的味道…

您识别了父pid,但没有告诉
pkill
要杀死哪个子进程。试试
pkill-P$(@alvits My bad.I实际上是用
pkill-P$(cat-pid)运行的sleep
。只是忘记了帖子中的那一部分。请注意使用了
-f
,这是您没有的。它告诉
pkill
匹配整个命令行,而不仅仅是进程名。而且您的命令在我的Oracle Enterprise Linux 6.4上运行良好。这很奇怪。您确定读取的
pid
文件正确吗?什么
bash
版本和您在哪个平台上?您是否以同一用户的身份运行脚本和
pkill
命令?我正在将循环的结果传送到lemonbar。我希望它每5秒更新一次,或者每当我单击按钮时更新一次(这将触发命令以重新启动循环)@Marcel,在你的帖子中是10秒,但你一直在说5秒。也许这就是上面的编辑在你的案例中不起作用的原因。也许你试图杀死
sleep 10s
,但你的脚本正在运行
sleep 5s
。因为上面的代码在我的linux上工作。@Marcel,请注意
pkill“sleep 10s”
如果没有
-f
将永远无法工作,因为
sleep 10s
不是进程名,
sleep
是。我有
-f
sleep 10s
。我意外地放了5,因为我计划在它工作后加速它。将每个循环的pid发送到pid文件会更有意义。$!represents最后执行的命令的PID