내가 뭘 하려는지, 프로세스를 포크, 자식 프로세스에서 새 실행 파일을 exec, 자식 프로세스를 디버그하기 위해 부모 프로세스를 GDB로 종료하고 자식 프로세스에 연결하도록한다. 하위 프로세스 (forkable)를 포크하기 위해 초기 부모 프로세스를 사용하는 이유는이 자식 프로세스에 대한 일부 환경 속성을 설정하고자하는데, 이는 리눅스 커널에 대한 시스템 호출을 필요로하고 GDB를 수정하지 않기를 원합니다 . 나는 부모 프로세스가 종료 된 후에 GDB를 통해 자식 프로세스에 연결할 수 있다고했지만,이 경우 자식은 exec() 시스템 호출 후에 이미 실행 중이다. 문제는 자식에 대해 ptrace (PTRACE_TRACEME)를 사용할 수 없다는 것입니다.이 경우 처음 명령에서 중지하게됩니다.이 경우 GDB는 부모에 의해 이미 추적되어 있으므로 연결할 수 없습니다. exec() 할 때 첫 번째 명령에서 중지되도록 환경을 설정 한 후 하위 프로세스를 중지하려면 어떻게해야합니까?exec() 후에 새로 실행 된 프로그램의 첫 번째 명령에서 하위 프로세스를 중지하려면 어떻게해야합니까?
0
A
답변
0
나는 다른 사람에게 도움이 될 수 있으므로 내 필요를 충족시키는 방법을 찾아 냈습니다. 포크 후, 필요한 환경을 설정하고, 디버깅 할 프로그램을 실행하기 직전에 {kill (getpid(), SIGSTOP)}에 정지 신호를 보냅니다. 부모가 자식 프로세스를 기다리지 않고 종료합니다. 그래서 오직 하나의 PID가 있습니다. Open GDB는 "gdb -p pid"를 사용하여 연결합니다. 정지 신호는 GDB에 전달됩니다. GDB 프롬프트에서 명령 sig 0을 주어 프로세스를 계속 진행하십시오. 하위 프로세스가 계속 진행되고 다음에 디버그 가능한 프로그램을 실행하면 이제 정상적으로 디버깅 할 수 있습니다.
관련 문제
- 1. Perl을 사용하여 프로세스를 중지하려면 어떻게해야합니까?
- 2. # winforms : 프로그램의 첫 번째 실행 확인
- 3. Django 관리 명령에서 하위 프로세스를 중지하는 방법?
- 4. 첫 번째 함수가 실행 된 후에 함수를 호출하십시오.
- 5. php exec 명령에서 호출 된 파이썬 스크립트에서 ssh 실행
- 6. exec 명령에서 실행 된 명령이 실패하는지 찾는 방법은 무엇입니까?
- 7. iOS에서 하위 프로세스를 실행 중입니까?
- 8. make 내 파이프의 첫 번째 명령에서 종료 상태를 얻으려면 어떻게해야합니까?
- 9. 클라이언트가 연결을 끊은 후에 twistedmatrix 하위 프로세스를 계속 처리하려면 어떻게해야합니까?
- 10. 응용 프로그램의 첫 번째 JFrame을 두 번째 JFrame으로 대체하려면 어떻게해야합니까?
- 11. 쉘에서 분리 된 하위 프로세스를 죽입니다.
- 12. 좀비 하위 프로세스를 방지하려면 어떻게해야합니까?
- 13. 첫 번째 하위 선택기
- 14. JavaScript에서 실행중인 함수를 중단하고 중지하려면 어떻게해야합니까?
- 15. 첫 번째 앱 실행 - Angular2로 된 Nativescript
- 16. 자바가 리눅스에서 프로세스를 실행
- 17. 모바일 응용 프로그램의 첫 번째 사용 감지
- 18. 조합 선택은 첫 번째 명령에서 작동하지만 두 번째 명령에서 작동하지 않습니까?
- 19. 지침 (iOS)에 대한 응용 프로그램의 첫 번째 (및 첫 번째) 시작시의 투명 스플래시 화면
- 20. Windows에서 하위 프로세스를 시작하려면 어떻게해야합니까?
- 21. Idris에서 하위 프로세스를 호출하려면 어떻게해야합니까?
- 22. 분리 된 Docker exec 명령의 프로세스를 확인하십시오.
- 23. 첫 번째 변경 후에 webpack을 계속 시청하려면 어떻게해야합니까?
- 24. 특정 하위 div 후에 두 번째 스크립트를 선택하려면 어떻게해야합니까?
- 25. JFrame이 첫 번째 인스턴스화 후에 작동하지 않습니까?
- 26. 전체 foreach가 실행 된 후에 트리거 실행
- 27. 하위 쿼리 첫 번째 일치
- 28. 두 번째 Java 프로세스를 시작하려면 어떻게해야합니까?
- 29. 하위 집합에서 첫 번째 선택
- 30. 첫 번째 (및 모든) 출력에서 프로세스를 종료