2011-05-04 2 views
1

내 C + + 프로그램에서, 나는 단순히 그들을 기다리지 않고 백그라운드에서 프로그램을 실행하려고합니다.C++에서는 대기하지 않아도 백그라운드에서 실행되는 것을 의미하지 않습니까?

그러나 Linux에서 다음과 같이 백그라운드에서 vi를 시작하면 : vi &, 그러면 vi가 표시되지 않습니다. 내 프로그램에서 vi가 종료 될 때까지 기다리지 않아도 vi가 계속 나타납니다.

그렇다면 실제로 백그라운드에서 실행하지 않는다는 의미입니까? 이 문제를 어떻게 해결할 수 있습니까?

또한 Linux에서 전경에 vi를 가져 오려면 fg을 입력하면 vi가 나타납니다. C++에서는 어떻게 할 수 있습니까?

+1

백그라운드에서 프로그램을 시작하는 방법을 보여주는 코드를 제공해야합니다. – Vusak

+0

일반적으로 프로그램을 시작하고 기다리지 않으면 프로그램과 새 프로그램이 동시에 실행됩니다. 새로운 프로그램이 백그라운드에서 실행되고 있다는 것을 의미하지는 않습니다. –

+1

백그라운드를 실행하는 것은 OS 개념이며 C++과 아무 관련이 없습니다. –

답변

5

무엇 오히려 복잡 여기에 무슨 (자세한 내용은 이상 당신은 아마 job control에 glibc는 설명서 절을 참조 필요)하지만 짧은 버전은 다음과 같습니다 터미널에 액세스 할 수 있습니다 만 전면 프로세스 그룹. 다른 프로세스는 터미널에 액세스하려고 시도하면 커널에 의해 자동으로 ^Z이 처리됩니다.

C에서 프로세스를 포크 할 때 부모가 포 그라운드 프로세스 그룹에 속해 있으면 부모 또는 자식이 변경하지 않는 한 그 자식도 포 그라운드 프로세스 그룹에 속한 것으로 간주됩니다. vi &을 수행 할 때 쉘 (다른 C 프로그램뿐입니다)은 전경 프로세스 그룹에서 vi을 사용합니다. 하지만 당신은 그렇게하지 않으므로 vi이 즉시 실행됩니다.

이제 C 프로그램에서 프로세스를 포크하고 쉘에서 &으로 실행 한 것처럼 처리해야합니다. 당신은 그것의 일부만을 할 수 있습니다. 포 그라운드가 아닌 프로세스 그룹에 넣을 수 있습니다 - 지침은 glibc 매뉴얼을 참조하십시오. 내가 말했듯이, 복잡하다 -하지만 은 쉘의 작업 제어 명령이 알고있는 프로세스 그룹 목록에 추가 할 수 없다. 그 목록은 셸 내부의 상태이므로 다른 프로세스에서 가져올 수있는 방법이 없습니다.

관련 문제