URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 72932
[ Назад ]

Исходное сообщение
"sh: как отвязать дочерний процесс от родительского"

Отправлено serg3263 , 17-Мрт-07 20:44 
Eсть:
Linux + apache + php(без fork'а) + shell-скрипт родительский + shell-скрипт дочерний

Задача:
средствами\командами shell отвязать дочерний скрипт от родительского.

Детали задачи:
1. User загружает в браузере php-страницу (web-страницу).
2. php запускает sh скрипт (родительский).
3. sh скрипт (родительский) порождает дочерний sh скрипт,
который выполняется ооооченннь дооолго (больше, чем разрешено в apache, и чем хватит терп User ждать результата).
4. User\apache закрывает\убивает php скрипт и, соотв-но, родительский sh скрипт.

5. Дочерний скрипт выполняется, и есть признак его выполнения -- файл статуса, по которому User из браузера, обратившись к php мониторит процесс.

ВОПРОС:
Как СРЕДСТВАМИ/КОМАНДАМИ shell "отвязать" дочерний sh скрипт от родительского, чтобы родительский скрипт убить, а дочерний остался выполняться?


Содержание

Сообщения в этом обсуждении
"sh: как отвязать дочерний процесс от родительского"
Отправлено Serge , 18-Мрт-07 11:30 

>ВОПРОС:
>Как СРЕДСТВАМИ/КОМАНДАМИ shell "отвязать" дочерний sh скрипт от родительского, чтобы родительский скрипт
>убить, а дочерний остался выполняться?

Одна строка... man sh рекомендуется к прочтению

cat parent.sh
#!/bin/sh
nohup child.sh &


закрытие/редирект потоков добавьте сами


"sh: как отвязать дочерний процесс от родительского"
Отправлено serg3263 , 19-Мрт-07 19:02 
>
>>ВОПРОС:
>>Как СРЕДСТВАМИ/КОМАНДАМИ shell "отвязать" дочерний sh скрипт от родительского, чтобы родительский скрипт
>>убить, а дочерний остался выполняться?
>
>Одна строка... man sh рекомендуется к прочтению
>
>cat parent.sh
>#!/bin/sh
>nohup child.sh &
>
>
>закрытие/редирект потоков добавьте сами

Огромное спасибо за рекомендации,

...только  4. User\apache закрывает\убивает php скрипт и, соотв-но, родительский sh скрипт И ДОЧЕРНИЙ sh ТОЖЕ убивает.
т. к. процессы не отделены др от др. Осталась взаимосвязь процессов -- лидером группы остался родительский процесс.

Может быть Вам приходилось реализовывать fork (отделение дочернего процесса от родительского, а не только запуск процесса ф фоне) в sh | bash ?


ВОПРОС ОСТАЕТСЯ:

Как КОРРЕКТНО ОТДЕЛИТЬ дочерний процесс от родительского в sh ?
Как в процессе сменить PPID ? Что нужно сделать в окружении родителького процесса?
Интересует реализация fork и действия над PID и PPID ОБОИХ ПРОЦЕССОВ в sh.


"sh: как отвязать дочерний процесс от родительского"
Отправлено Serge , 19-Мрт-07 19:42 
>...только  4. User\apache закрывает\убивает php скрипт и, соотв-но, родительский sh скрипт И ДОЧЕРНИЙ sh ТОЖЕ убивает.

[serge@lx-sles tmp]$ cat ./parent.sh
#!/bin/sh

nohup /tmp/child.sh > /dev/null 2>&1 &

sleep 60;

[serge@lx-sles tmp]$ cat ./child.sh
#!/bin/bash

while [ 1 ]
do
date;
sleep 5
done

-------------------------

[serge@lx-sles tmp]$ ./parent.sh

Ctrl+c

[serge@lx-sles tmp]$ ps axf
1570 pts/5    S      0:00 /bin/bash /tmp/child.sh
1576 pts/5    S      0:00  \_ sleep 5