2012-05-14 13 views
5

I wykonał skrypt Perla w tle za pomocą następującego poleceniaproces Tło Unix ZATRZYMANIA nienormalnie

nohup perl myPerlSCript.pl >debug_log & 

Po kilku minutach mam status

[1] + Stopped

Nie spodziewałem się, że przestanie, ani nie wiem, co go powstrzymało. Jak mogę to debugować i dowiedzieć się, dlaczego to się zatrzymało? Właściwie jestem zainteresowany poznaniem poleceń unixowych do debugowania.

Odpowiedz

1

Czy używasz tcsh przez przypadek? Tcsh ma wbudowane polecenie nohup, z którym miałem wcześniej wiele problemów, widząc dokładnie to, co widzisz.

Spróbuj użyć bezpośrednio /usr/bin/nohup, jeśli tak jest.

+0

Nie, nie używam tcsh. To jest bash. – user703555

3

Istnieje kilka sposobów zatrzymania procesu działającego w tle. Wszystkie z nich obejmować jeden z tych sygnałów:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP jest ciężka. Jest nie do odblokowania, nie nadaje się do użytku, nie nadaje się do użytku. Zatrzymuje proces tak, jak zabiłby go SIGKILL. Pozostałe mogą być obsługiwane przez proces w tle, aby zapobiec zatrzymaniu.

  • sygnał został wysłany przez inny proces, za pomocą kill(2) lub sposobem do siebie za pomocą raise(3) lub kill(2)
  • Proces próba zapisu do terminalu i opcjonalny terminal tostop jest włączone (zob wyjście stty -a). Generuje to SIGTTOU.
  • Proces próbował zmienić tryby terminala za pomocą tcsetattr(3) lub odpowiednika ioctl. (Są to te same tryby przedstawione przez stty.) Generuje to SIGTTOU niezależnie od aktualnego stanu flagi tostop.
  • Proces próbował odczytać z terminala. Generuje to SIGTTIN.

Ta lista prawdopodobnie nie jest kompletna.

+0

Dzięki - czy można zobaczyć, który z tych sygnałów spowodował co najmniej "[1] + Zatrzymany"? – Rup

+1

uruchom go w zsh zamiast w bash, da ci bardziej szczegółową wiadomość. bash drukuje "Zatrzymany" dla wszystkich 4 z nich. –

Powiązane problemy