Имя процесса из его 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