2016-08-13 8 views
1

C에서 다른 프로그램을 실행/열기/실행하는 방법과이를 차단하지는 않지만 동시에 실행하십시오. 그런 다음 서버/클라이언트와 같은 테스트를하고 싶습니다. 그리고 나서이 프로그램이 종료 되었으면이 프로그램을 닫고 싶습니다. 내가 읽었습니다C에서 다른 프로그램을 열고 실행 한 다음이 프로그램을 닫으십시오.

system() or execv() 

그러나 처음에는 결과를 기다리고있는 것 같습니다. 두 번째는 Linux에서만 작동하는 것 같습니다. 가장 좋은 시나리오에서는 크로스 플랫폼 또는 최소 MacOS/Windows/Linux (Ubuntu) 작업 솔루션을 갖고 싶습니다. 더 이상 필요하지 않을 때 이전에 연 프로그램을 종료해야합니다.

답변

3

POSIX 및 방법은 그것을 (? https://technet.microsoft.com/en-us/library/bb463220.aspx 어쩌면 너무 Windows에서 사용할 수있는) 할 수있는 다른 플랫폼에 대한 아이디어가 없습니다 fork + exec* 콤보를 사용하려면

fork을 사용하면 현재 프로세스를 복사하는 새 프로세스를 만들 수 있습니다. 그 과정에 대한 귀하의 핸들은 INT 프로세스 식별자 (PID)입니다 :

int pid; 

if (0 > (pid=fork()){ 
    perror("fork failed"); 
    return -1; 
} 
if (0 == pid){ 
    //CHILD PROCESS 
    printf("I'm the child process, my pid is: %d\n", getpid()); 

} 
//pid > 0 ==> PARENT PROCESS 
puts ("I'm the parent process"); 
printf("The pid of the child I've just spawned is %d\n", pid); 

가 (현재를 대체하기 위해 exec* 기능을 사용하여, 자식 프로세스의 실행 파일을 실행하려면 예를 들어, 당신이 경우 자녀의 하위 이미지에서 실행) 프로세스 이미지를 실행 파일에서로드합니다. 부모에서

, 당신은 다음 (종료를 요청 =) kill에 과정을 PID 핸들을 사용할 수 있습니다

kill(pid, SIGTERM); //please terminate 

을하고 종료 된 후에는 종료 상태를 검색 할 수 waitpid을 사용할 수 있습니다 .


은 (system 내부적으로 system가 자식 프로세스가 완료 될 때까지 기다릴 수는 waitpid 부분은 system에서 분리되지 않기 때문에 fork + execv이 (가. 쉘) + waitpid을 경영진 사용합니다.)

또한 (예 : 공유 메모리, 메시지 큐, 또는 신호와 같은 다른 옵션이 자식 프로세스와 fildescriptor 기반의 통신 채널을 설정하는 dup2pipe 또는 socketpair 보길 원하는 아마 것

당신이 경우에만 매우 기본적인 의사 소통이 필요함).

맨 페이지는 프로세스 및 IPC를 관리하는 데 유용한 리소스입니다.

+0

thx 이것은 많은 도움이된다. :) 나는 미래에 사용할 것이지만 지금은 더 간단하게 테스트를 재 설계 할 것이라고 생각한다. 1. 테스트 서버를 별도의 pthread로 실행한다. 2. 쉘 cmd를 사용하여 popen()으로 서버를 echo한다. 3. cmd 출력을 얻고 그것이 맞다는 것을 주장하십시오. –

0

방법에서 C 다른 프로그램을 실행/열기/실행 :

사용 그것을 차단하는 방법하지 system

를?

당신이 멀티 태스킹을 구현, 그래서 다른 스레드를 생성하는 또 다른 프로세스 또는 pthread_create 을 만들 fork을 사용하여, 나는 크로스 플랫폼 또는 최소 맥 OS를하고 싶은 this

를 살펴해야/Windows/Linux (Ubuntu) 작업 솔루션. 이 -

system 리눅스와 윈도우에서 작동하지만 난

+0

ok thx하지만 나중에 닫을 수 있습니까? –

+0

@ MichałZiobro, 됐어, 됐어? – Mouin