У меня есть веб-страница, которая должна запускать некоторые задания в виде php-процессов в фоновом режиме. Кроме того, он должен иметь возможность идентифицировать каждый процесс, чтобы закрыть его позже. Ex. Worker1, Worker2 … Как это достигается? также как убить тех, кто занимается процессом? ОС – ubuntu. * Эти сценарии всегда работают в фоновом режиме, поэтому они сами не убиваются.
Вы можете помещать скрипты и другие задачи оболочки в фоновом режиме, используя nohup
в начале, и символ &
в конце команды:
~$ nohup php script.php >> /var/tmp/script.log 2>&1 &
Обратите внимание, что с опцией 2>&1
вы перенаправляете вывод (стандартную ошибку и вывод) на стандартный вывод, а затем в файл для ведения журнала (здесь /var/tmp/script.log
).
EDIT: с jobs
команд вы можете перечислить процесс, который вы активируете в свою сессию (здесь 1797
– процесс pid):
~$ jobs -l [1]+ 1797 Running nohup php script.php >> /var/tmp/script.log 2>&1 &
Вы можете отправлять сигналы процессу после обнаружения процесса pid. Чтобы убить «красиво» процесс (где ${PID}
– это процесс pid):
~$ kill -SIGTERM ${PID}
Если процесс застрял, вы можете использовать сигнал SIGKILL
(или -9
). Обратите внимание, что SIGKILL
нельзя перехватить, затем процесс немедленно прекращается без каких-либо операций «очистки» (закрытие временных файлов и т. Д.). kill -9 ${PID}
или kill -SIGKILL ${PID}
следует использовать только как последний ресурс.
Вот некоторая теория:
Хороший курс о Gnu / Linux: