2012-10-12 2 views
1

리눅스에서 C++로 내 응용 프로그램을 코딩하고 있습니다. C++에는 프로그램을 실행하는 '시스템'이라는 기능이 있습니다.리눅스에서 C++로 파일에서 프로세스 열기

나는 다음과 같은 C++에서 GNOME 시스템 모니터를 열려고 : 나는 gnome-의 창을 닫을 때까지

system("gnome-system-monitor"); 

그러나, 내 응용 프로그램 블록의 스레드가 I이 '시스템'함수를 호출 할 때 시스템 모니터.

발신자 프로세스를 차단하지 않고 파일에서 프로세스를 여는 다른 방법은 없습니까?

+1

포크 – zapredelom

+1

'fork()'다음에'exec()'함수 중 하나가 오는 것이 좋지만, 이것은 더 낮은 수준이고 복잡합니다. –

+1

fork/exec를 사용하여 하위 프로세스를 생성하고 하위 프로세스에서 gnome-system-monitor를 실행해야합니다. – bbg

답변

2

리눅스하거나 POSIX 기반 시스템에서 작동하는 고전적인 방법은, (에러가이 예에서 생략 핸들링.)

if (0 == fork()) { 
    execlp("gnome-system-monitor", "gnome-system-monitor", (char *)NULL); 
} 

인이 (a) 새로운 프로세스를 생성하고, (b) 이 새로운 프로세스에서 PATH 환경 변수를 검색하여 "gnome-system-monitor"를 실행하고, "gnome-system-monitor"라는 이름을 argv [0]으로 전달하고 다른 인수는 전달하지 않습니다. 부모에게는 새로운 프로세스가 생성되면 어떤 결과도 기다리지 않고 앞서 진행됩니다.

자세한 내용은 forkexeclp의 설명서 페이지를 참조하십시오.

+0

execlp를 호출 한 후 어떻게 호출자 스레드가 실행을 멈 춥니 다. – jondinham

+1

'execlp' 또는 임의의'exec' 패밀리를 호출하는 프로세스는 완전히 새로운 것으로 대체 된 프로그램을가집니다 - [the man page] (http : /linux.die.net/man/3/execlp). 그래서 호출하기 전에'fork '하고 싶습니다. 그것은 당신이 의미하는 것입니까, 아니면 다른 것입니까? –

+0

포크와 같이 프로세스를 만들지 못하는 것 같습니다. 그 후에 'exec'에 대한 호출이 기존 프로세스를 대체합니다. – jondinham

1

fork/exec 또는 posix_spawn. glib도 GSpawn을 사용하고 있습니다.

0

예. separte 스레드에서 시스템 기능을 호출하십시오.

1

Gnome은 GTK (Glib 포함)보다 위에 구축되었으며, 아마도 Glib Spawning Processes 함수가 필요합니다.

물론 Linux 및 Unix의 경우 processesforked입니다. 프로세스와 관련된 syscalls에 대한 자세한 내용은 advanced unix programmingadvanced linux programming과 같은 유용한 책을 읽으십시오. 특히 fork(2), execve(2), pipe(2)과 관련이 있습니다. proc(5) 파일 시스템에 대해서도 읽어보십시오.

관련 문제