프로 세 스 PID 가 져 오기
먼저 현재 프로 세 스 의 이름 을 grep 에 전달 하려 면 main 의 argv [0] 를 통 해 실 행 될 때의 프로그램 이름 을 얻 을 수 있 습 니 다. 그러나 주의해 야 할 것 은 경 로 를 통 해 실 행 된 프로그램, 예 를 들 어./a. out, argv [0] 도./a. out 입 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
 
void
 program_unique_check(
const
 char
*
 program)
{
    FILE    *
fd;
    pid_t   id =
 0
;
    char
    command[
50
]
 =
 {
0
}
;
    char
    pid_num[
50
]
 =
 {
0
}
;
    const
 char
*
 program_name;
 
    program_name =
 strrchr (
program,
 '/'
)
;
 
    //          
    if
 (
program_name)
        ++
program_name;
    else
        program_name =
 program;
 
    //       ps -Ao pid,comm|grep xxx
    sprintf(
command,
 "ps -Ao pid,comm|grep %s"
,
 program_name)
;
 
    printf
 (
"Command to excute: %s/n
"
,
 command)
;
 
    //         
    if
 (
 (
fd =
 popen(
command,
 "r"
)
)
 ==
 NULL )
 {
        perror(
"popen"
)
;
        exit(
EXIT_FAILURE)
;
    }
 
    //         ,       PID,        20   (PID        !)
    fgets(
pid_num,
 20
,
 fd)
;
    printf
 (
"Result :/n
%s/n
"
,
 pid_num)
;
 
    //           
    id =
 atoi(
pid_num)
;
    printf
 (
"DETECTED PID: %d/n
"
,
 id)
;
 
    //      
    if
 (
getpid(
)
 ==
 id)
        printf
 (
"This's my self: %d/n
"
,
 id)
;
    else
 {
        printf
 (
"Here's one already running: %d/n
I'll kill him!/n
"
,
 id)
;
        //SIGKILL  ,           
        if
 (
 kill (
id,
 SIGKILL)
 ==
 -
1
 )
 {
    		perror(
"kill"
)
;
    		exit(
EXIT_FAILURE)
;
        }
    }
}
 
int
 main (
int
 argc,
 char
**
argv)
{
    program_unique_check(
argv[
0
]
)
;
    sleep (
10
)
;
    return
 0
;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.