프로세스의 부모 프로세스를 변경 하시겠습니까? 대해 들었지만 기억이 없습니다. 프로그램의 부모 프로세스도

프로세스의 상위 프로세스를 변경할 수 있습니까? 그렇다면 어떻게?

예를 들어

  • 어떻게 screen연결하는 관리 screen세션과 다른 쉘 프로세스에 내부에서 실행중인 프로세스를? 부모 프로세스의 변경이 있습니까?

  • 프로그램이 실행중인 쉘 프로세스의 다른 변경 방법에 대해 들었지만 기억이 없습니다. 프로그램의 부모 프로세스도 변경 되었습니까?

  • disown프로세스가 프로세스의 상위 프로세스를 변경 한다고 생각했는데 이름이 disown암시 하기 때문 입니다. 그러나 나는 그것이 사실이 아니라는 것을 알았습니다.

  • Emacs 클라이언트는 다른 터미널 탭에서 emacs 서버에 연결할 수 있습니다. 부모 프로세스의 변경이 있습니까?



답변

프로세스의 상위 프로세스 ID (ppid)는 커널 외부에서 변경할 수 없습니다. 설정된 시스템 호출이 없습니다. 프로세스가 부모가 종료되었다는 신호에 응답하지 않으면 커널은 프로세스 부모가 종료 된 후에 만 ​​ppid를 (pid) 1로 변경합니다. 이것이 일어날 경우, 처리 요구 (다양한 신호들을 무시하도록하려면 SIGHUP, SIGTERM사전 등).

screen(1)분리 및 재 부착을 처리하는 매우 우아한 수단이 있습니다. 처음 시작할 때 screen실제로 사용자 인터페이스 (ui)를 시작하고 있으며 기본적으로 데몬 (세션 관리자)을 만듭니다. 이 데몬에는 새 프로세스 그룹 ( setpgrp(2)), 새 세션 ID ( setsid(2)) 와 관련된 터미널이 없습니다 . 로 실행되는 데몬 SCREEN은 의사 터미널 ( pty)에 연결된 하위 프로세스를 생성 한 다음 pty 및 ui ( screen) 의 데이터를 다중화합니다 . 서브 프로세스는 실제 터미널과 대화하고 있다고 생각합니다.

ui가 screen종료되면 데몬 SCREEN은 여전히 ​​실행 중이며, 데이터를 버퍼링하고, 신호를 처리하고, 새로운 ui를 기다리는 등 다른 프로세스 그룹이므로 자체 세션에 있습니다. 새로운 ui로 다시 연결 screen하면 데몬은 이전처럼 계속 멀티플렉싱됩니다. 데몬은 모든 하위 프로세스가 종료되거나 종료되거나 치명적인 버그가 발생하거나 호스트가 재부팅 될 때까지 계속 실행됩니다.


답변

이해 했어요. 커널을 변경하여 일부 모듈을 작성해야합니다! 나는 그것이 어떤 경우에는 유용 ​​할 것이라고 생각합니다. 예를 들어 오랜 시간 동안 많은 노력을 기울이면 한 시간 동안 많은 자원이 필요합니다. (이 경우 평소와 같이) 시스템이 응답하지 않으면 예기치 않은 조치를 수행합니다 (수행해야하며 클릭을 확신하지 못하기 때문에) 올바른 장소에 마우스를 놓아 시스템이 오랫동안 응답하지 않음) 실수로 상위 프로세스를 종료하십시오. 시스템은 보통 모든 어린이를 죽입니다! 그러나 자식 프로세스가 루트 및 부모 전용 서수 사용자 및 작업 인 경우 서수 사용자도 수행하면이 프로세스는 어떤 경우에도 종료되지 않습니다! 그리고 그의 부모는 PID 1로 초기화됩니다. 그리고 마지막으로 시스템이 응답하면 계층 구조를 복원하려고합니다. 그러나 당신은 할 수 없습니다! 표준 su를 사용하여 일반 사용자로 터미널에서 루트로 업그레이드 시스템을 시작하십시오. 왜? 콘솔에서 모든 실수와 경고를 받으십시오. 특히 업그레이드 유틸리티는 GUI입니다. 그들은이 정보를 아무것도 얻지 못합니다 … Windows OS에서는 이것이 가능하다는 것을 기억합니다. 특별한 WinAPI 기능이 있습니다. 리눅스에서 왜 이것을 할 수 없습니까? 명확하지 않습니다 … 간단한 것입니다 !!!


답변