Сродни ответу @andcoz, если Вы не знаете PID приложения (я принимаю, Вы не знаете это прочь наизусть), попробуйте это:
kill -HUP `pidof [application_name]`
В модели Unix, запуская другую программу включает два primivites:
fork()
создает (почти) идентичную копию обработки вызовов. Новый процесс называют дочерним процессом, и исходный процесс называют родительским процессом. Дочерний процесс выполняет тот же код как оригинал, имеет те же полномочия, имеет ту же среду и получает копию изменяемой памяти данных родительского процесса. Самое видимое различие между двумя процессами - то, что у них есть различные идентификаторы процесса, и различные идентификаторы родительского процесса (PPID ребенка является PID родителя).execve()
заменяет код и данные текущего процесса кодом и данные, загруженные из исполняемого файла. Этот системный вызов берет новую среду процесса как аргумент.Большинство высокоуровневых функций, созданных вокруг fork()
и execve()
передайте текущую среду процесса execve()
. Таким образом, если процесс не изменяет свою собственную среду или вызовы execve()
непосредственно, названная программа наследует среду программы вызова.
Оболочки обычно передают свою среду программам, которые они называют. Можно изменить среду оболочки в любое время путем присвоения значения переменной среды (foo="some value"
; необходимо звонить export foo
если переменная уже не находится в среде), или удалите переменную из среды путем сбрасывания ее (unset foo
). Если Вы хотите запустить внешнюю программу с переменными различной или новой среды, существует синтаксис ярлыка:
foo="some value" mycommand
примерно эквивалентно
(foo="some value"; export foo; exec mycommand)
(где круглые скобки ограничивают объем установки foo
).
API относятся к exec
семейство C
функции, которые используются для выполнения другого процесса.
Типичная последовательность для одного процесса для запуска другого является первой к fork
, затем в ребенке просто создал, назовите один из exec
функции.
Промежуточный fork
и exec
, в дочернем процессе может быть изменена среда, прежде чем целевой исполняемый файл запускается.
execle
и execvpe
также позвольте обработке вызовов передавать в целевой среде непосредственно.
Если execle
и execvpe
не используются, и среда не изменяется между вызовами к fork
и exec
в ребенке применяется нормальное правило.
Примеры оболочки предназначены, чтобы показать Вам, как можно изменить среду для ребенка оболочки. Если бы оболочка не использовала некоторые вышеупомянутые "приемы", то она не могла бы позволить Вам сделать это - все дочерние процессы получили бы точную копию среды Вашей текущей оболочки.
foo="some value" mycommand
не работает. Как там предполагается, a;
преждеmycommand
? – StackExchange for All 07.08.2011, 03:52