Jak całkowicie rozwidlić polecenie powłoki korzystające z przekierowania


13

Przez lata napisałem sporo skryptów powłoki (ale z pewnością nie jestem sysadminem) i jest coś, co zawsze sprawiało mi kłopoty: jak mogę rozwidlić polecenie powłoki odporne na zawieszanie się w tle ze skryptu Bash ?

Na przykład, jeśli mam to:

command_which_takes_time input > output

Jak mogę „nohup” i rozwidlić to?

Następujące czynności nie wydają się robić, co chcę:

nohup command_which_takes_time input > output &

Jakiej składni szukam, a czego nie rozumiem?

Odpowiedzi:


13

Spróbuj utworzyć podpowłokę za pomocą (...):

( command_which_takes_time input > output ) &

Przykład:

~$ ( (sleep 10; date) > /tmp/q ) &
[1] 19521
~$ cat /tmp/q # ENTER
~$ cat /tmp/q # ENTER
(...) #AFTER 10 seconds
~$ cat /tmp/q #ENTER
Wed Jan 11 01:35:55 CET 2012
[1]+  Done                    ( ( sleep 10; date ) > /tmp/q )

18

Powinieneś spróbować setsid(1). Używaj go tak, jakbyś używał nohup:

setsid command_which_takes_time input > output

To (zgodnie z setsid(2)podręcznika), robi fork(2), _exit(2)procesu macierzystego, a następnie wywołania procesu dziecko setsid(2), aby utworzyć nową grupę procesów (sesja).

Nie możesz tego zabić, wylogowując się, i to nie jest część przekleństwa kontroli zadań Bash. Pod każdym względem jest to właściwy demon.


4

jest disownwbudowane polecenie bash:

[1] 9180
root@ntb1:~# jobs
[1]+  Running                 sleep 120 &
root@ntb1:~# disown
root@ntb1:~# jobs
... no jobs, disowned
root@ntb1:~# ps aux | grep sleep | grep -v grep
root      9180  0.0  0.0   4224   284 pts/0    S    17:55   0:00 sleep 120
... but the sleep still runing
root@ntb1:~#

Po wyprzeć , zadanie jest wyparł ze swojej skorupy (więc można nawet wylogowania) i nadal pozostaje uruchomiony dopiero wykończone.

Zobacz pierwsze jobspolecenie wymienione, sleepjednak drugie jobspo odrzuceniu nie. Ale za pomocą psmożemy zobaczyć, że zadanie nadal działa.



-2

To zadziała (nie wpisuj żadnych dodatkowych spacji):

command &>output.file

1
Wydaje się, że nie ma to nic wspólnego z pytaniem, ponieważ nie rozwidla ani nie osiąga odpowiednika nohup.
Dan Getz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.