2012-05-14 7 views
5

IUnix Hintergrund Prozess GESTOPPT abnorm

nohup perl myPerlSCript.pl >debug_log & 

Nach wenigen Minuten eine Perl-Skript im Hintergrund mit dem folgenden Befehl ausgeführt habe ich den Status als

[1] + Stopped

Ich habe nicht erwartet, dass es aufhört, und ich weiß auch nicht, was es gestoppt hat. Wie kann ich dies debuggen und herausfinden, warum es aufgehört hat? Ich bin eigentlich daran interessiert zu wissen, die Unix-Befehle zu debuggen.

Antwort

1

Verwenden Sie tcsh zufällig? Tcsh kommt mit einem eingebauten Nohup-Befehl, mit dem ich vorher viele Probleme hatte, und sehe das genaue Verhalten, das Sie sehen.

Versuchen Sie, /usr/bin/nohup direkt zu verwenden, wenn das der Fall ist.

+0

Nein, ich verwende tcsh nicht. Es ist Bash. – user703555

3

Es gibt mehrere Möglichkeiten, wie ein Prozess im Hintergrund gestoppt werden kann. Alle von ihnen eines dieser Signale beinhalten:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP schwerwiegend ist. Es ist nicht blockierbar, unzerstörbar, unhandlich. Es stoppt den Prozess so sicher wie SIGKILL würde es töten. Die anderen können durch den Hintergrundprozess behandelt werden, um ein Stoppen zu verhindern.

  • Ein Signal wurde von einem anderen Prozeß gesendet kill(2), oder durch das Verfahren mit sich selbst unter Verwendung raise(3) oder kill(2)
  • Der Prozess zum Terminal zu schreiben versucht, und das Terminal Option tostop aktiviert ist (siehe Ausgabe von stty -a). Dies erzeugt SIGTTOU.
  • Der Prozess hat versucht, die Terminal-Modi mit tcsetattr(3) oder einem gleichwertigen ioctl zu ändern. (Dies sind die gleichen Modi, die von angezeigt werden.) Dadurch wird SIGTTOU unabhängig vom aktuellen Status des Flags tostop generiert.
  • Der Prozess hat versucht, vom Terminal zu lesen. Dies erzeugt SIGTTIN.

Diese Liste ist wahrscheinlich sehr unvollständig.

+0

Danke - ist es möglich, zu sehen, welches dieser Signale das '[1] + Stopped'' verursacht hat? – Rup

+1

führen Sie es in Zsh statt Bash, wird es Ihnen eine detailliertere Nachricht geben. Bash druckt "Stopped" für alle 4 von ihnen. –