как определить работающий скрипт bash? - PullRequest
2 голосов
/ 11 октября 2011

Я редактирую код и LaTeX и люблю выполнять периодическую компиляцию, чтобы проверить, выполняет ли редактирование то, что я хочу.Обычно я запускаю небольшую командную строку bash, которая выглядит как «while true; делаю make -s foo.pdf; sleep 2; done &», а затем редактирую foo.tex и перезагружаю результат в xpdf для проверки.Каждый раз, когда я сохраняю свои изменения, скрипт создает PDF-файл, и я могу проверить, делают ли мои изменения то, что они хотят.Тем не менее, после того, как я выполнил пару таких действий, завершил свое редактирование и продолжил, у меня есть эти маленькие скрипты, которые все еще работают, и xterm, в котором я запускал каждый, может быть закрыт.ps показывает только спящую часть скрипта, что затрудняет поиск правильного родителя, который его запустил.Как я могу узнать, какой родитель из всех снов, которые я вижу, убивает, т. Е. Как определить, какой сон связан с make foo, с которым я закончил?

Ответы [ 4 ]

1 голос
/ 28 октября 2011

Если вы часто используете этот скриптлет, поместите его в скрипт.Затем вы можете указать имя сценария в списке процессов.

1 голос
/ 11 октября 2011

вы можете использовать pstree или 'ps -afjx', которые оба показывают дерево процессов, что упрощает идентификацию родителя.

вы также можете распечатать родительский PID в tmp-файл в каждом сценарии - и удалите этот файл после завершения сценария.

0 голосов
/ 29 октября 2011

В командной оболочке, в которой вы ввели команду, просто введите jobs, и цикл while должен появиться в списке. Предположим, номер задания в скобках равен 3, затем введите kill %3, чтобы убить его.

В качестве альтернативы, включите j в свои флаги ps (ps j, вероятно, наиболее удобно, так как он также выберет BSD-выбор по умолчанию для всех ваших процессов, имеющих терминалы), отметьте ID группы процессов (PGID), скажем, это 1234, тогда сделайте kill -- -1234.

0 голосов
/ 12 октября 2011

Если я сделаю bash -c "while true; do make -s foo.ps; sleep 2; done", то команда команды bash, обозначенная ps, имеет имя файла, которое мне нужно для идентификации сценария.Таким образом, вместо запуска сценария непосредственно из командной строки терминала, я должен запустить bash с командой из командной строки!Спасибо Уильяму (думаю, это был Перселл), чей пост заставил меня задуматься о правильном!Mnm Cee предложил файл блокировки с соответствующим pid, но для его создания потребовалось бы больше ввода, чем это легко сделать в командной строке.Вероятно, придется написать отдельную функцию, а затем вызвать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...