У меня есть Баш скрипт, где я ставлю блок команд в фоновом режиме, а затем хотят убить ихBash убить фон команду блокировать
#!/bin/bash
{ sleep 117s; echo "test"; } &
ppid=$!
# do something important
<kill the subprocess somehow>
мне нужно найти способ, чтобы убить подпроцесс, так что если он еще спит затем он перестает спать, и «тест» не будет напечатан. Мне нужно сделать это автоматически в скрипте, поэтому я не могу использовать другую оболочку.
То, что я уже пытался до сих пор:
kill $ppid
- не убивает сон вообще (с -9 флагом тоже), PPID сон становится 1, но тест не будет печататьсяkill %1
- такой же результат, как и вышеkill -- -$ppid
- жалуетсяkill: (-30847) - No such process
(и подпроцесс еще здесь)pkill -P $ppid
- тест был напечатан
Как это сделать?
Не могли бы вы объяснить разницу между '{...}' и '(...)' в случае фоновой задачи? –
@GrigoryKalabin, хороший пункт. В случае фоновой задачи оба выполняются в под-оболочке – iruvar