Имя процесса из его pid в Linux

Как получить имя процесса из его pid? Например, я выполняю cat file1.txt, но я хочу выяснить эту команду cat и ее аргументы, начиная с ее pid в системе. Есть структура, чтобы определить это или что-то подобное? Любая идея?

5 ответов

Решение

Не существует общего способа сделать этот Unix.
У каждой ОС есть разные способы справиться с этим, а некоторые очень сложны. Вы упоминаете Linux, хотя. В Linux информация находится в файловой системе /proc.
Чтобы получить командную строку для идентификатора процесса 9999, прочитайте файл /proc/9999/cmdline,

На Linux вы можете посмотреть в /proc/, Попробуйте набрать man proc для дополнительной информации. Содержание /proc/$PID/cmdline даст вам командную строку этого процесса $PID был запущен с. Существует также /proc/self для осмотра себя:)

Альтернативой (например, в Mac OS X) является использование libproc, Смотрите libproc.h.

POSIX C НЕ поддерживает стандартный API для получения имени процесса по PID.

В linux вы можете получить имя через LINUX Proc API: /proc/$PID/cmdline. И код выглядит так:

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;
}

Чтобы получить имя процесса с идентификатором процесса, скажем, 9000, используйте эту команду:

ps -p 9000 -o comm=

Пока на этот вопрос ответили, я бы хотел добавить свои 2 цента.

В моем случае, когда процесс 1111 создает процесс 22222 через канал (по крайней мере, это то, что я слышал), /proc/2222/cmdline не дает правильное имя процесса, а вместо этого дает что-то вроде 1111_1. Я должен использовать / proc / 2222 / comm, чтобы получить правильное имя процесса.

Используйте команду ниже в Linux

ls -l /proc/[pid]/exe

Это даст название процесса / имени приложения

ps --pid <pid> -o comm h: Эта команда дает имя исполняемого файла. Например, если вы запустите сценарий name.sh, то приведенная выше команда выдаст вывод какbash

ps --ppid <pid> -o comm h: Эта команда дает результат как name

Другие вопросы по тегам