|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alex Ivanov 2:5020/400 21 Jun 2005 13:11:41 To : Valentin Davydov Subject : Re: PID процесса в sh скрипте -------------------------------------------------------------------------------- Tue Jun 21 2005 12:15, Valentin Davydov wrote to Alex Ivanov: >> Есть такая конструкция в sh скрипте: >> urlsnarf -i fxp >> /path/to/log/log.txt & >> echo $! > /path/to/pid/urlsnarf.fxp0.pid >> >> Решил переделать все по умному и выводить все в syslog, т.е >> urlsnarf -i fxp |logger -t urlsnarf & >> echo $! > /path/to/pid/urlsnarf.fxp0.pid >> >> И тут вылезло, что в urlsnarf.fxp0.pid остается pid процесса logger, а не >> urlsnarf. Есть решение, как обойти? VD> Во-первых, надо ли обходить? Ведь urlsnarf и logger связаны пайпом, так VD> что при помирании одного из них другой получит SIGPIPE и тоже сдохнет. Все несовсем так просто: дело в том, что urlsnarf не совсем корректно обрабатывает сигналы, и поэтому его приходится убивать через kill -9. А в случае если убить процесс logger он продолжает висеть в памяти (выясненно эксперементально). По уму надо бы просто пофиксить его исходники, чтоб помирал корректно, да в C я не силен :( VD> А в-главных, man sh: VD> Background Commands (&) VD> If a command is terminated by the control operator ampersand (&), VD> the VD> shell executes the command asynchronously; the shell does not wait VD> for VD> the command to finish before executing the next command. VD> The format for running a command in background is: VD> command1 & [command2 & ...] VD> То есть в твоём случае это будет что-то вроде VD> (urlsnarf -i fxp & echo $! > /var/run/urlsnarf.fxp.pid) | logger -t VD> urlsnarf & Спасибо огромное, данный вариант заработал как мне надо. --- ifmail v.2.15dev5.3 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/166795639390c.html, оценка из 5, голосов 10
|