어떤 시스템 호출이 새로운 프로세스를 생성합니까?

어떤 시스템 호출이 새로운 프로세스를 생성합니까?

내 Linux 시스템에서 명령을 실행할 때 ps일부 사용자 프로세스가 두 번 표시됩니다(다른 PID...). 새로운 프로세스인지, 동일한 프로세스의 스레드인지 알고 싶습니다. 나는 표준 C 라이브러리에 새로운 프로세스를 생성할 수 있는 몇 가지 함수가 있다는 것을 알고 있습니다. 예를 들어, 명령 fork()을 실행할 때 프로세스가 두 번 나타나도록 할 수 있는 특정 함수가 무엇인지 알고 싶습니다. ps새로운 프로세스나 스레드를 생성합니다.

답변1

조금 혼란 스럽습니다. fork상위 프로세스의 이미지를 복사하여 새로운 프로세스를 생성하는 시스템 호출입니다. 나중에 자식 프로세스가 다른 프로그램이 되고자 하면 일부 exec계열 시스템 호출을 호출합니다( 예: 셸에서 실행 execl하려는 경우 셸은 새 자식 프로세스를 포크한 다음 .lsexecl("/bin/ls")

두 개의 프로그램이 표시되고 해당 프로그램이 pid다른 경우 해당 프로그램 ppid(부모 ID)을 확인하세요. 예를 들어 가 프로세스 who p1is 인 경우 해당 ID가 프로세스 포크의 프로세스임을 의미합니다 . 그러나 첫 번째 프로세스가 다른 프로세스와 다르다 면 동일한 명령이 두 번 실행된다는 의미입니다.ppidpidp2p1ppidpid

pid와 는 ppid같지만 s(스레드 ID)가 다르다 면 tid하나의 프로세스에 2개의 쓰레드가 있다는 의미입니다.

나는 자신만의 쉘을 만드는 것이 좋은 출발점이라고 생각합니다.

관련 정보