포크의 신호 동작은 무엇입니까? 모든 신호가 포크에서 상속되어야합니까?포크의 신호
Q
포크의 신호
4
A
답변
13
적어도 Linux에서는 시그널 핸들러 자체가 계승되지만 보류 신호는 상속되지 않습니다. 리눅스 fork(2)
man page 인용
:
포크()는 자사의 PID와 PPID에 부모 프로세스와 다른 자식 프로세스를 생성하고, 자원 사용률은 0 파일 잠금으로 설정되어 있다는 사실에 보류중인 신호는 상속되지 않습니다.
이것은 신호가 (부모) 프로세스에 속하기 때문에 의미가 있습니다. 새로 생성 된 프로세스는 (현재) 현재 프로세스의 복사본이므로 시그널 핸들러는 보존됩니다. 직접 관련되지 않지만
종종 새로운 실행 파일 (현재 신호를 서비스하는 기능을 덮어) 프로세스에로드되고 이후는 fork()
는 모든 신호 처리기를 파괴 따르는 exec()
형 호.
0
그러나 코드가 이식성이 있으며 모든 플랫폼에서 일관성을 유지하면 프로그램 실행에 영향을 줄 수있는 신호의 동작을 검사하는 것이 더 좋습니다. Linux가 보장하기는하지만 구현 방법은 자유롭게 선택할 수 있습니다 구현. sigaction 같은 것을 편리하게 사용할 수 있습니다.
0
신호 처리기가 복사 되더라도 보류중인 신호가 다시 초기화된다는 paxdiablo 대답으로갑니다. 여기 do_fork의 커널 소스 코드에서 잘라내어 실제로 프로세스 대신 포킹을 수행합니다.
/*do_fork(...)*/
spin_lock_init(&p->alloc_lock);
init_sigpending(&p->pending);// reinitializing the pending signals
관련 문제
- 1. 포크의 복제품 동등 물?
- 2. 누가 유닉스 포크의 역사를 알고 있는가?
- 3. 신호 수신 신호 SIGIO
- 4. 신호 차단
- 5. Windows상의 신호
- 6. 신호 처리
- 7. 신호 스택
- 8. RS 232 중단 신호
- 9. 신호 NaN의 유용성?
- 10. C++ 연결 신호
- 11. 포크 후 호출 신호
- 12. 장고에 여러 신호 등록
- 13. GtkNoteBook 신호 처리 문제
- 14. 유닉스에서 신호 처리의 차이점
- 15. GPS 신호 강도 찾기
- 16. 웨이크 온 신호 On
- 17. QT 신호 슬롯 질문
- 18. Pylons의 신호 처리
- 19. 신호 QT, QueuedConnection
- 20. 스레드 신호 기초
- 21. 신호 11 (SIGSEGV)는
- 22. django의 맞춤 신호
- 23. 백그라운드 프로세스에 신호 전송
- 24. 관리자로부터 Django 신호
- 25. 기본 신호 처리기를 실행
- 26. 장고 등록 신호
- 27. 신호/슬롯이있는 PySide IPC
- 28. Java에서 SIGCHILD 신호
- 29. Java에서 신호 처리 라이브러리?
- 30. MPI 신호 처리
'exec()'형식 호출은 'SIG_IGN'으로 설정된 항목을 재설정하지 않습니다. 적어도 Linux에서는 이러한 설정이 하위 행을 캐스케이드합니다. 이것은''SIGCHLD'를'SIG_IGN'으로 설정 한 다음 쉘을 생성합니다 :-) 나는 당신도 * * [여기] (http://stackoverflow.com/questions/32708086/)에 응답하는 것을 본다. ignoring-signals-in-parent-process), 그러니 신경 쓰지 마세요 ;-) – Steven