web-dev-qa-db-fra.com

Nom du processus de son pid sous linux

Comment obtenir un nom de processus de son pid? Par exemple, j'exécute cat file1.txt, mais je veux comprendre cette commande cat et ses arguments depuis son pid dans le système. Existe-t-il une structure pour le déterminer ou quelque chose de similaire? Une idée?

27
TheForbidden

Il n'y a aucun moyen général de faire cela sous Unix.
Chaque système d'exploitation a différentes manières de le gérer et certains sont très difficiles. Vous mentionnez cependant Linux. Sous Linux, les informations se trouvent dans le système de fichiers/proc.
Pour obtenir la ligne de commande du processus id 9999, lisez le fichier /proc/9999/cmdline.

26
Anubhab

Sous linux, vous pouvez regarder dans /proc/. Essayez de taper man proc pour plus d'informations. Le contenu de /proc/$PID/cmdline vous donnera la ligne de commande qui traite $PID a été exécuté avec. Il y a aussi /proc/self pour vous examiner :)

Une alternative (par exemple sur Mac OS X) consiste à utiliser libproc. Voir libproc.h .

13
robbie_c

POSIX C ne prend PAS en charge une API standard pour obtenir le nom du processus par PID.

Sous linux, vous pouvez obtenir le nom par LINUX Proc API:/proc/$ PID/cmdline. Et le code ressemble à ceci:

const char* get_process_name_by_pid(const int pid)
{
    char* name = (char*)calloc(1024,sizeof(char));
    if(name){
        sprintf(name, "/proc/%d/cmdline",pid);
        FILE* f = fopen(name,"r");
        if(f){
            size_t size;
            size = fread(name, sizeof(char), 1024, f);
            if(size>0){
                if('\n'==name[size-1])
                    name[size-1]='\0';
            }
            fclose(f);
        }
    }
    return name;
}
10
QJGui

Pour obtenir le nom de processus d'un identifiant de processus, par exemple 9000, utilisez cette commande:

ps -p 9000 -o comm=
9
Thunder

Bien que cette question ait été répondue, je voudrais ajouter mes 2 cents.

Dans mon cas, lorsque le processus 1111 crée le processus 22222 via pipe (c'est du moins ce que j'ai entendu), /proc/2222/cmdline ne donne pas le nom de processus correct, mais donne à la place quelque chose comme 1111_1. Je dois utiliser /proc/2222/comm pour obtenir le nom de processus correct.

2
toddwz

Utilisez la commande ci-dessous sous Linux

ls -l /proc/[pid]/exe

Il donnera le nom du processus/nom de l'application

0
Vikram B