setsid i zamkniecie STDIN,STDERR,STDOUT

Jacek Konieczny jajcus w bnet.pl
Nie, 10 Paź 2004, 19:51:58 CEST


On Sun, Oct 10, 2004 at 10:42:12AM +0200, Paweł Żurowski wrote:
> a musi tam byc setsid? nie wystarczy "&"? (sprawdzilem u siebie, z "&"
> dziala)

Żeby się program odpiął od terminala to musi.

[jajcus w dell jajcus]$ sleep 10 &
[1] 10912
[jajcus w dell jajcus]$ ps -C sleep
PID TTY          TIME CMD
10912 tty2     00:00:00 sleep

[jajcus w dell jajcus]$ sleep 10 </dev/null >/dev/null 2>&1 &
[1] 10914
[jajcus w dell jajcus]$ ps -C sleep
PID TTY          TIME CMD
10914 tty2     00:00:00 sleep

Jak widać w obu przypadkach chodzi w tle, ale jest wciąż przypięty do
terminala. Po zamknięciu terminala (SAK, zamknięcie xterma itp.) proces
dostanie SIGHUP i zginie.

[jajcus w dell jajcus]$ setsid sleep 10 </dev/null >/dev/null 2>&1 &
[1] 10916
[jajcus w dell jajcus]$ ps -C sleep
PID TTY          TIME CMD
10917 ?        00:00:00 sleep

Dopiero tutaj proces został prawidłowo "zdemonizowany" -- odpięty od
terminala. Ale to też nie zawsze zadziała, np. pod mc procesy mają
otwarte jeszcze inne deskryptory, które wiążą je z rodzicem i/lub
z terminalem.

Pozdrowienia,
	Jacek




Więcej informacji o liście dyskusyjnej pld-users-pl