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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

ps -p 9000 -o comm=

Ответ 5

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

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

Ответ 6

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

ls -l /proc/[pid]/exe

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