본문 바로가기
서버/리눅스

[Linux] 실행 중인 프로세스 PID 확인

by 코딩히어로 2022. 5. 24.
728x90

리눅스에서 프로세스 PID는 너무나 기본적이면서 중요합니다

왜냐하면 해당 프로세스가 문제가 생겼을 때나 현재 실행상태 등을 체크할 때

그리고 소켓을 여는 프로세스라면 몇개의 소켓이 열려있는지 등을 파악하기 위해서는

PID와 프로세스는 단짝친구같은 존재입니다

 

먼저 해당 프로세스의 PID를 리눅스 쉘에서 바로 확인하는 방법은 다음과 같습니다

ps -ef | grep 'Process Name'

Process Name은 실행하는 프로세스의 실행 명칭으로 예를 들어

test.c의 o파일이 test라고 가정하면 다음과 같이 실행합니다

ps -ef | grep test

하지만 여기까지는 순전히 Process가 실행상태에 있을 때 확인이 가능한 명령어로

만약에 Process가 어떠한 이유에서 종료되었다면 어떻게 해야 할까요?

바로 프로세스 실행 중 생성한 로그를 통해 해당 프로세스 PID를 기록합니다

void write_log(char *message){
        FILE *log_fp;
        char logMessage[1024];

        time_t uctTime;
        struct tm *loctime;

        (void)time(&uctTime);

        memset(logMessage,0x00,sizeof(logMessage));
        loctime = localtime(&uctTime);

        strftime(logMessage,255,"\n[%F %H:%M:%S] :",loctime);

        log_fp = fopen(DF_LOG_FILE_NAME,"a");
        if(log_fp!=NULL){
                fprintf(log_fp,logMessage);
                fprintf(log_fp, message);

                fclose(log_fp);
                log_fp=NULL;
        }
}


void main(){
    memset(logmsg,0x00,sizeof(logmsg));
    sprintf(logmsg,"[[[[[[[[[[[[[[[[[[  Start PID =%d  ]]]]]]]]]]]]]]]]]]\n",getpid());
    write_log(logmsg);
}

위 코드에서 주목해야 하는 부분은 getpid() 함수입니다

getpid()는 해당 프로세스의 pid값을 반환합니다

이를 통해 프로세스가 처음 시작되는 라인에서 PID를 로그에 남겨둔 뒤에 실행합니다

 

추후 프로세스가 종료되더라도 로그에 실행되었던 PID가 남아있기 때문에

추적이나 기타 로그들을 통해 에러를 파악할 수 있습니다

728x90
반응형

댓글