Comment obtenir le PID d'un processus sous Linux en C
J'ai besoin de tuer un processus à l'aide de la tuer API. Pour cela j'ai besoin de l'id de processus du processus. J'ai essayé d'obtenir de l'aide:
ret = system("pidof -s raj-srv");
mais il n'est pas de retourner la valeur correcte. Je ne veux pas tuer le processus en utilisant ceci:
ret = system("pkill raj");
Est-il une API qui peut être utilisée pour obtenir l'id de processus?
Check this out stackoverflow.com/questions/939778/...
OriginalL'auteur ravi J | 2011-11-17
Vous devez vous connecter pour publier un commentaire.
Vous obtenez le statut de retour de
system
. Ce n'est pas le pid. Vous voulez quelque chose comme ceci:OriginalL'auteur cnicutar
Il pourrait y avoir plusieurs instances de processus en cours d'exécution dans ce cas , pidof renvoie des chaînes de pid séparées par un espace .
OriginalL'auteur Alok Prasad
La
system()
d'appel n'a pas de retour de la sortie depidof
, il retournepidof
le retour de code, qui est à zéro s'il réussit.Vous pouvez consommer la sortie de
pidof
à l'aide depopen()
au lieu desystem()
, mais je suis sûr qu'il ya une meilleure façon (manièrepidof
utilise elle-même). Peut-être qu'il erre à travers/proc
.opendir
etreaddir
/proc
. Mais pas tous les Unix ont/proc
.Vrai, mais ils n'ont probablement pas
pidof
.Peut-être, mais ils ont
ps
etgrep
.Pas de désaccord. Mon point est que si vous êtes heureux d'utiliser
pidof
, puis à l'aide/proc
ne sera probablement pas vous inquiéter.Je ne peux accepter qu' 🙂
OriginalL'auteur Marcelo Cantos
Ce qui est retourné par la
system
fonction est le code de retour de la commande en cours d'exécution.Ce que vous pouvez faire est quelque chose comme ceci:
Puis lire le contenu du fichier
/tmp/pid-of-raj-srv
.popen
est une meilleure façon, car il n'a pas besoin de créer un fichier temporaireOriginalL'auteur Some programmer dude
Je sais que ce n'est pas une nouvelle thread, mais comme je l'ai récemment été confronté à la même question, je vais vous demander. Avez-vous vu un de ce:
Vous pouvez utiliser
sysctl
pour vous donner les informations nécessaires sans avoir à passer par unsystem( "bla, bla" )
appel.Il semble être beaucoup plus compliqué au premier abord, mais qui peut être intéressant en fonction de vos besoins.
sysctl()
n'est pas la chose à utiliser pour Linux, maisopendir()
etreaddir()
de/proc
à la place.OriginalL'auteur j4x