2017-04-13 3 views
0

execlp 명령으로 파이어 폭스를 실행해야하는 C 응용 프로그램을 만들고 있는데, 실행할 때마다 현재 터미널이 "손실"되었지만, execlp을 사용해야합니다. 내가 전에 있었던 터미널, 그래서 내 질문은 : 거기에 하나의 터미널에 execlp 전화를 할 수있는 방법이며 블록 하나없이 다른 하나에서 실행됩니까? 여기 Execlp가 다른 터미널에서 실행됩니다.

내 코드의 조각입니다 : 내가 제대로 이해하고있어 경우, 당신은 당신의 프로그램이 파이어 폭스를 실행 말을하는지

pid_t child = fork(); 
if (child == -1) { 
    perror("fork error"); 
} else if (child == 0) { 
    exec_pid = getpid(); 
    execlp("firefox", "firefox", URL, NULL); 
    perror("exec error"); 
} 
    // keep with program logic 
+0

"현재 터미널을 잃어 버렸다"는 것이 정확히 무엇을 의미합니까? 그냥 초점이 맞지 않는다는 것을 의미합니까? – rici

+0

http://stackoverflow.com/questions/11807688/how-to-detach-a-process-from-terminal-in-unix – stark

+0

같은 터미널을 계속 사용하려면 exec를 실행 한 후에 아무 키나 누르십시오. 또는 내 프로그램을 죽여라. 그래서 내가 터미널을 잃었다 고 말했을 때 나는 그것을 의미했다. –

답변

2

와 파이어 폭스가 종료 될 때까지 쉘의 제어를 유지합니다. 이 경우에는이 문제를 해결하는 데 몇 가지 방법이 있습니다.

가장 쉬운 방법은 프로그램을 백그라운드에서 실행하는 것입니다. ./my_program &과 같이 실행하면 별도의 프로세스로 시작되며 터미널 제어권은 즉시 반환됩니다.

C 코드에서이 문제를 해결하려면 첫 번째 단계는 포크 다음에 하위 프로세스의 프로세스 ID를 출력하는 것입니다. 별도의 쉘에서 ps을 사용하여 프로그램과 분기 된 PID를 모니터하십시오. 프로그램이 실제로 종료되고 있는지 확인하고 대기중인 프로그램이 아닌지 확인하십시오.

+0

프로그램을 실행하여 새로운 별도의 터미널 창에서 시작하는 방법은 [이 관련 질문] (https://askubuntu.com/questions/484993/run-command-on-anothernew-terminal-window)을 참조하십시오 . – bta