У меня есть скрипт bash, который выполняет параллельную обработку в цикле. Я не хочу, чтобы параллельный процесс нагружал процессор, поэтому я использую команду сна. Вот упрощенная версия.
(while true;do sleep 99999;done)&
Итак, я выполняю приведенную выше строку из приглашения bash и получаю что-то вроде:
[1] 12345
Где [1]
- номер задания, а 12345
- идентификатор процесса (pid) цикла while. Я делаю kill 12345
и получаю:
[1]+ Terminated ( while true; do
sleep 99999;
done )
Похоже, весь скрипт был прерван. Тем не менее, я делаю ps aux|grep sleep
и нахожу, что команда sleep все еще работает, но с собственным pid! Я могу убить sleep
, и все, кажется, хорошо. Однако, если бы я сначала убил сон, цикл while запускает новый sleep
pid. Это такой сюрприз для меня, так как сон не параллелен циклу while. Сам цикл представляет собой один путь выполнения.
Итак, у меня два вопроса:
- Почему команда sleep получила свой собственный идентификатор процесса?
- Как мне легко убить цикл while и сон?