簡體   English   中英

獲取pid的進程名稱

[英]Get the process name of pid

有關:
進程名稱從pid在Linux中
獲取觸發了某些信號的進程的pid

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>

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



static void my_handler(int signum, siginfo_t *siginfo, void *context) {
    printf("Got signal '%d' from process '%d' of user '%d' (%s)\n",
        signum, siginfo->si_pid, siginfo->si_uid, get_process_name_by_pid(siginfo->si_uid));
}

int main(void) {
    struct sigaction act;
    memset(&act, '\0', sizeof(act));
    act.sa_sigaction = &my_handler;
    act.sa_flags = SA_SIGINFO;
    sigaction(SIGUSR1, &act, NULL);
    printf("Hi, my pid is %d\ntalk to me with 'kill -SIGUSR1 %d'\n", getpid(), getpid());
    while(1)
        sleep(1000);
    return 0;
}

我正在嘗試捕獲誰向程序發送了信號。

這成功顯示了信號發送器的pid,但我也想知道進程名稱。

我已經嘗試過使用函數get_process_name_by_pid(),但是它似乎沒有用
問題:如何查看進程名稱?

我正在運行哦RHEL6.6

您正在將錯誤的參數傳遞給get_process_name_by_pid()函數。 該函數需要一個進程ID,您正在向其傳遞用戶ID。 你要:

get_process_name_by_pid(siginfo->si_pid)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM