Как получить имя процесса из его pid? Например, я запускаю cat file1.txt, но я хочу выяснить, что команда cat и его аргументы с момента его pid в системе. Есть ли структура, чтобы определить ее или что-то подобное? Любая идея?
Имя процесса из его pid в linux
Ответ 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
Это даст название процесса/имени приложения