2015-01-03 2 views
1

자식을 포함 할 수있는 프로세스의 PID가 있습니다. 모든 하위 프로세스의 PID를 얻으려면 어떻게해야합니까? 나는 내 자신의 PTY 핸들러를 만든다. 그래서 사용자가이 핸들러에서 쉘을 실행할 때 그는 쉘에서 직접 (더 이상) 프로그램을 실행할 수있다. 모든 run 프로그램은 쉘의 자식이된다. 그래서, Ctrl + C를 누르면 가장 새로운 프로세스에 신호를 보내야하므로, 마지막 프로세스의 PID를 알아야합니다.C에서 부모 프로세스의 자식 목록 가져 오기

+0

왜 묻는가? 실제 사용 사례는 무엇입니까? 그것을 개선하기 위해 질문을 편집하십시오! –

답변

1

당신은

그것은까지입니다 (... 그리고 당신이 wait(2) 등으로 성공적으로 기다렸다 일단 PID를 제거) 명시 적으로 모든 PID를 당신의 자식 프로세스 (fork(2) ... 결과)를 유지해야 이러한 pid를 유지하기 위해 데이터 구조를 선택하십시오.

다른 접근 방식 (pspstree가하고있는 것입니다 예를 들어, proc(5)를 사용하여이 ....) 매우 휴대용 및 비효율적 없습니다.

기본 규칙은 fork을 호출 할 때마다 명시 적으로 그 결과를 유지해야하며 (3 가지 경우를 테스트해야합니다. 자식 프로세스 인 경우 0, 부모 프로세스 인 경우 0, 오류시 <) wait 시간.

Read Advanced Linux Programming; 그 주제와 관련된 많은 페이지가 있습니다.

당신은 또한 process groups 및 세션에 관심이있을 수 있습니다. setpgrp(2), setsid(2), daemon(3), credentials(7) 등을 참조하십시오. 음수 또는 0 PID를 사용하는 경우 kill(2)은 프로세스 그룹에 신호를 보낼 수 있으며 해당 목적으로 killpg(2)을 사용할 수도 있습니다.

+1

fork()가 새로운 프로세스를 만듭니다. 하지만 제 경우에는 이미 자식이 있습니다. 분석 할 필요가 있습니다. – linuser

+0

자식 *이있는 * 프로그램 *입니다. 그래서 당신은 프로그램을 썼고, 프로그램이 자식 프로세스를 가질 수있는 유일한 방법 인'fork' 호출을 간접적으로 썼습니다. 당신은 당신의 자식 프로세스의 모든 pid를 관리하기 위해 프로그램을 개선해야합니다. –

+0

글쎄, 내 프로그램은 자식을 만들어,이 자식은 쉘 (bash, sh 등)이어야한다. bash 사용자는 더 이상 프로세스를 실행할 수 없습니다. 그래서 내 문제는 bash가 호출 할 프로세스의 PID를 얻는 것이다. – linuser

관련 문제