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
반응형
'서버 > 리눅스' 카테고리의 다른 글
[Linux] 프로세스 메모리 사용률 증가 문제 해결 (4) | 2022.05.26 |
---|---|
[Linux] top 옵션 명령 (3) | 2022.05.26 |
[Linux] json-c 설치 (3) | 2022.05.16 |
[Linux] CentOS7 Cmake version update or install (4) | 2022.05.13 |
[Linux] Apache Http access log, error log 출력 (10) | 2022.04.01 |
댓글