2010-03-05 3 views
1

Supposons que j'ai un exécutable appelé 'exe' qui engendre un processus fils. Ce processus enfant doit devenir un démon et nous devons changer son nom. Ensuite, je veux utiliser killall pour envoyer un signal à ce processus en utilisant le nouveau nom, mais je dois utiliser l'ancien nom.Pourquoi ne puis-je pas utiliser killall avec le nouveau nom donné à un processus fils avec execvp() sous Linux?

L'ordre des événements est la suivante:

  1. start 'exec'
  2. fourche -> sortie si le parent
  3. détachement (chdir, setsid, umask)
  4. execvp ('exec' , 'daemon', ...)

Sur 4, argv [0] est défini sur 'daemon'. Après cela, je peux faire un 'ps' et un 'top' et je vois clairement le nom 'daemon' apparaissant dans la sortie de ces commandes. Cependant, quand j'essaye de tuer le processus (envoyer un signal) en utilisant killall, je dois fournir le nom 'exec' et non 'daemon'.

Il semble que le noyau ne soit pas entièrement conscient du nouveau nom.

La raison pour laquelle j'ai besoin de cette fonctionnalité est que je veux générer quelques processus enfants avec des responsabilités différentes en utilisant le même exécutable. Je veux aussi pouvoir les arrêter et les démarrer individuellement en me référant à eux par leur nom. Et je ne veux pas créer un lien symbolique entre les nouveaux noms et l'exec executable commun (comme le fait busybox).

Y a-t-il un moyen de contourner cela? Je utilise Linux Ubuntu 9.10.

Cheers, Johan

+3

Pourquoi ne pas retenir que tous votre enfant de pid et les utiliser pour interagir avec eux? – Ramon

+0

On dirait que se souvenir du pid va être beaucoup plus sûr que de faire "killall" et potentiellement cibler d'autres processus (non-enfant) avec le même nom. –

+0

L'idée est de pouvoir avoir une interaction sur le shell avec les processus en cours. utiliser 'killall' semblait le plus évident sans avoir recours aux outils de bricolage qui ont besoin d'obtenir le pid de quelque part ... – Johan

Répondre

2

essayer d'utiliser pkill au lieu de killall

2

Certains outils utilisent le nom binaire, d'autres utilisent le nom du processus (ce que vous passez comme execvp premier argument). Essayez d'y faire face :)

+0

Ok, maintenant je sais qu'il y a une différence entre le nom du processus et le nom binaire. – Johan

Questions connexes