Powiel możliwe:
Linux: Prevent a background process from being stopped after closing SSH clientJak używać fork() do demonizacji procesu potomnego niezależnie od rodzica?
Mam program C, który mam dostęp i interakcję z terminalem (zwykle z SSH na pole Linux). Próbowałem znaleźć rozwiązanie problemu, w którym po zamknięciu terminalu/wylogowaniu proces kończy się wraz z nim (program zasadniczo prosi o pewne opcje, a następnie wykonuje swoją działalność bez potrzeby dalszej interakcji, więc chciałbym go mieć kontynuować działanie nawet po wylogowaniu z SSH).
Istnieją sposoby w Linuksie, aby tego uniknąć, takie jak "ekran", ale chcę to zrobić programowo z C bez polegania na zainstalowanych pakietach, takich jak ekran - nawet jeśli oznacza to ponowne wymyślenie koła.
Do tej pory rozumiem, że fork() jest standardowym trywialnym sposobem demonizacji procesu, więc czy ktoś mógłby mi pomóc zakończyć kod, który pozwala na wykonanie opisanego powyżej procesu?
ciągu rodzica:
main()
{
//Do interactive stuff
signal(SIGCHLD, SIG_IGN); //stops the parent waiting for the child process to end
if(fork())
exit(0);
// and now the program continues in the child process
mogę teraz wylogowania SSH która zamyka oryginalną powłokę ... i dziecko kontynuuje swoją pracę!
ciągu dziecka:
//Continue with processing data/whatever the program does (no input/output to terminal required)
exit(0);
Przeczytaj wszystkie odpowiedzi. http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client –
Um, po prostu użyj 'nohup' kiedy go uruchomisz? Nie wymaga rozwidlenia. –
@ Brian, nohup nie pozwoli mi wejść w interakcję z programem. Jest to interakcja w linii poleceń. – user1166981