Processus de fond Unix ARRÊTÉ anormalement

J’ai exécuté un script perl en arrière-plan en utilisant la commande suivante

nohup perl myPerlSCript.pl >debug_log & 

Après quelques minutes, j’ai le statut de

[1] + Arrêté

Je ne m’attendais pas à ce que ça s’arrête, je ne sais pas non plus ce qui l’a arrêté. Comment puis-je déboguer ceci et découvrir pourquoi il s’est arrêté? Je suis en fait intéressé à connaître les commandes unix à déboguer.

Un processus exécuté en arrière-plan peut être arrêté de plusieurs manières. Tous impliquent l’un de ces signaux:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP est grave. C’est impossible à débloquer, inimaginable, impossible à manipuler. Il arrête le processus aussi sûrement que SIGKILL le tuerait. Les autres peuvent être manipulés par le processus d’arrière-plan pour empêcher l’arrêt.

  • Un signal a été envoyé par un autre processus utilisant kill(2) , ou par le processus à lui-même en utilisant raise(3) ou kill(2)
  • Le processus a tenté d’écrire sur le terminal et l’option de terminal tostop est activée (voir la sortie de stty -a ). Cela génère SIGTTOU .
  • Le processus a tenté de changer les modes du terminal avec tcsetattr(3) ou un ioctl équivalent. (Ce sont les mêmes modes que stty .) Cela génère SIGTTOU indépendamment de l’état actuel de l’indicateur tostop .
  • Le processus a tenté de lire à partir du terminal. Cela génère SIGTTIN .

Cette liste est probablement très incomplète.

Utilisez-vous tcsh par hasard? Tcsh est en fait livré avec une commande Nohup intégrée dans laquelle j’ai rencontré beaucoup de problèmes avant de voir le comportement exact que vous voyez.

Essayez d’utiliser /usr/bin/nohup directement si c’est le cas.