Windows에서 gcc-linux-4.1(CygWin의 크로스 컴파일러)을 사용하여 CygWin에서 RTAI 모델 소스(simulink로 생성)를 구축하고 ELF를 성공적으로 생성했습니다. ELF는 Ubuntu에서 잘 실행됩니다.
ELF가 Ubuntu에서 올바르게 실행되면 시스템 모니터에 이름은 같지만 프로세스 ID가 다른 4개의 프로세스가 있습니다.
하지만 gcc
Linux에서 소스를 빌드하면 프로세스가 1개만 생성되므로 호출되지 않을 수도 fork()
있습니다 .exec()
하나의 실행 파일에서 4개의 프로세스를 만드는 방법은 무엇입니까?
공연 ps -elF
:
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 3679 3314 0 57 - - 4362 hrtime 17:44 pts/1 00:00:00 /root/Test/test
5 S root 3680 3679 0 57 - - 4362 poll_s 17:44 pts/1 00:00:00 /root/Test/test
5 S root 3681 3680 0 56 - - 4362 rt_sch 17:44 pts/1 00:00:00 /root/Test/test
5 S root 3682 3680 0 -40 - - 4362 rt_sch 17:44 pts/1 00:00:00 /root/Test/test
답변1
일부 프로세스에서는 일반적으로 병렬 실행을 통해 성능을 향상시키기 위해 실행 후 자체 복사본을 추가로 생성하는 것이 완전히 정상입니다. 작동 방식에 관해서는, 프로세스는 forks(2)의 것입니다(구현 방법에 따라 exec(2) 자체의 다른 복사본을 실행할 수도 있고 실행하지 않을 수도 있습니다). man 2 fork
및 을 참조하십시오 man 2 exec
.
기본적으로 Linux의 새 프로세스는 먼저 fork(2)를 사용하여 이를 호출하는 프로그램의 복사본으로 생성됩니다. 그런 다음 exec(2)를 사용하여 프로세스 이미지를 교체할 수 있습니다. 예를 들어, 이는 셸을 사용하여 명령을 실행할 때의 일반적인 작업 흐름입니다. 동일한 프로세스인 경우 후속 실행이 없을 수 있습니다. 실행하지 않고도 하위 프로세스에 있는 것을 조건으로 하는 코드를 실행할 수도 있습니다.
케임브리지 대학교는이것이 어떻게 작동하는지에 대한 좋은 페이지가 있습니다더 많은 정보를 알고 싶다면.