У меня есть скрипт bash, который выполняет некоторую параллельную обработку в цикле. Я не хочу, чтобы параллельный процесс увеличивал процессор, поэтому я использую команду sleep. Вот упрощенная версия.Bash: сон в цикле while получает свой собственный pid
(while true;do sleep 99999;done)&
Так я исполняю эту строку из Баш строки и получить что-то вроде: [1] 12345
Где [1]
это количество рабочих мест и 12345
идентификатор процесса (PID) из цикла. Я делаю kill 12345
и получите:
[1]+ Terminated (while true; do sleep 99999; done)
Похоже, что весь сценарий был прекращен. Тем не менее, я делаю ps aux|grep sleep
и нахожу, что команда сна по-прежнему сильна, но со своим pid! Я могу убить sleep
, и все кажется прекрасным. Однако, если бы я сначала должен был убить сон, цикл while запускает новый sleep
pid. Это такой сюрприз для меня, поскольку сон не параллелен циклу while. Сам цикл является единственным путем выполнения.
Поэтому у меня есть два вопроса:
- Почему команда сна получить свой собственный идентификатор процесса?
- Как легко убить цикл while и sleep?
Я вижу. Я думал, что `sleep` был встроенной командой в bash, а не каким-то процессом. Теперь это имеет больше смысла. – User1 2010-12-15 16:55:41
Если вы используете bash, `type sleep` или` type -a sleep` предпочтительнее `which`. `which` является внешней командой; он не может обнаружить псевдонимы, функции или встроенные команды. Сравните вывод `which echo` и` type echo`. – 2016-08-17 19:00:09