질문이 실제로 더 일반적이지만 (예 : gcc
만 사용), 내 생각은 strace
을 사용하여 수행중인 작업을 파악하는 것입니다. 포크 (-F
를) 다음과 sout
에 추적의 출력을 보내는 동안,
strace -F -o sout gcc -Wall -o test test.c
이것은 gcc
프로세스에 대한 시스템 호출을 보여줍니다 내 시스템 (우분투 11.10/64)에, 난 그냥, strace
를 실행 너무있다. 이렇게하면 gcc
은 vfork()
, 그 다음은 execve()
이 자식에 있지만 실제로는 프로그램 소스가 fork()
/exec()
일 뿐이라는 것을 알 수 있습니다. sout
에서
관련 출력은 각 라인의 begnning에서
26264 stat("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", {st_mode=S_IFREG|0755, st_size=11248824, ...}) = 0
26264 access("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", X_OK) = 0
26264 vfork() = 26265
26264 wait4(26265, <unfinished ...>
26265 execve("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", ["/usr/lib/gcc/x86_64-linux-gnu/4."..., "-quiet", "-imultilib", ".", "-imultiarch", "x86_64-linux-gnu", "test.c", "-quiet", "-dumpbase", "test.c", "-mtune=generic", "-march=x86-64", "-auxbase", "test", "-Wall", "-fstack-protector", ...], [/* 46 vars */]) = 0
프로세스 실행의 PID이다. 따라서 기본 프로세스는 stat()
을 호출하여 cc1
을 찾은 다음 포크를 실행하고 자식 프로세스가이를 실행합니다.
내가 말했듯이 나는 인용문없이 질문에 대답 할 수 있었다. fork/exec는 프로그램에서 하위 프로세스를 호출하는 일반적인 방법입니다.
나는 strace를 생각조차하지 않았고, 나는 리눅스 사람이 아닙니다. 그래, 그 질문은 정말로 일종의 일반적인 질문이다. 고맙습니다! – vanneto