2013-06-11 5 views
3

J'ai un programme développé en C. Ce programme contient 2 sous-threads. Parfois, lorsque j'essaie d'arrêter mon application avec kill -15 <pid of main thread> l'application ne se termine pas. Et je ne peux voir que le pid du thread principal dans la sortie ps aux (Les pids des sous-thèmes ne sont pas affichés dans le outpout du ps aux). Et continuer à tuer le pid restant avec kill -15 <pid> ne provoque pas la fin de ce processus. Seul kill -9 <pid> provoquera la fin du processus.Pourquoi "kill -15" échoue parfois?

Ce problème se produit 3 fois dans 1000 essais.

  • Le système d'exploitation est Linux OpenWRT
  • La version du noyau est 2.6.30
  • Libs: libuClibc-0.9.30.1.so et libpthread-0.9.30.1.so

S'il vous plaît ne considère pas ce sujet avec dupliqué this one, parce que mon programme ne contient un gestionnaire de sigaction.

Répondre

2

Ce n'est pas un doublon, mais la réponse est la même. Attachez strace ou gdb et voyez ce qu'il fait quand il est accroché. Cependant, il n'y a que deux explications: soit vous (ou un code de bibliothèque que vous utilisez) SIGTERM bloqué avec sigprocmask, ou le processus est bloqué en sommeil ininterrompu dans le noyau, qui est généralement le résultat d'une tentative d'accès à un périphérique de stockage défaillant comme un disque dur en train de mourir ou un disque optique rayé.

Pourriez-vous élaborer sur quel OS, la version du noyau, les bibliothèques, etc. que vous utilisez?

+0

- Le système d'exploitation est Linux OpenWRT - La version du noyau est 2.6.30 - Libs: 'libuClibc-0.9.30.1.so' et' libpthread-0.9.30.1.so' – MOHAMED

+0

Oh. Est-ce que uClibc est configuré pour LinuxThreads plutôt que NPTL? Si oui, il fait toutes sortes de choses cassées avec la gestion des signaux et vous n'avez vraiment aucun espoir de le faire fonctionner correctement. –

+0

Merci beaucoup pour la réponse. Donc je dois trouver une autre solution. Pourriez-vous fournir des liens de sujets qui parlent de ce problème? – MOHAMED

Questions connexes