대화형 bash 프로세스와 bash 프로세스에서 시작되지 않은 프로세스가 있는 경우 해당 프로세스를 셸에 대한 작업으로 만드는 방법(프로그램)이 있습니까?
불가능해 보이지만 유용한 기능이 될 수 있습니다. 때로는 실수로 bash 프로세스를 종료하고 해당 작업 중 일부가 init 프로세스에 다시 할당되는 경우가 있습니다. 나는 그것들을 더 잘 관리할 수 있도록 다른 bash 프로세스의 작업으로 만들고 싶습니다.
감사해요.
답변1
나는 학교에서 이것이 불가능하다고 들었습니다. 이는 분명히 더 이상 사실이 아니지만 단일 프로세스로 이 문제를 해결하는 것은 상당히 복잡합니다.
주석에 제공된 두 개의 링크는 원하는 작업을 수행하기 위해 선택할 수 있는 간단한 옵션을 설명합니다. 그러나 이동 명령을 시작하기 전에 조치를 취해야 합니다.
https://unix.stackexchange.com/a/8696/329452 https://unix.stackexchange.com/a/49155/329452
또는 프로세스가 사용하고 있는 tty를 변경하는 방법을 알려줍니다. 따라서 입력과 출력을 이동할 수는 있지만 활성 프로세스의 자식이 되지는 않습니다.
이 게시물에는 더 많은 답변이 있지만 기본적으로 이러한 답변과 중복됩니다.
프로세스의 부모를 변경하려면 해당 부모가 죽어야 합니다. 과거에는 항상 상위 항목을 PID 1로 변경했습니다. 이것이 언제 변경되었는지는 확실하지 않지만 Linux 3.4부터 모든 고아를 가져오는 프로세스가 변경될 수 있습니다.https://unix.stackexchange.com/a/177361/5132. 아직 결과를 확인하는 중이에요. 나는 큰 변화로 인해 systemd가 덜 모놀리식으로 변할 것이라고 생각했습니다. 하지만분명히 systemd는 그 자체로 전체입니다.(페이지의 약 90%)
그렇긴 하지만, 이 역할을 맡은 프로세스는 전체 역할을 맡아야 합니다. 이는 단지 하나의 프로세스에 대해서만 수행되는 작업이 아닙니다.
대부분의 UNIX 쉘에는 방금 접목된 새로운 하위 프로세스를 인식할 수 있는 코드가 없습니다. 이러한 셸 중 일부는 다른 셸보다 해당 하위 프로세스의 종료에 대한 알림을 받을 가능성이 더 높습니다. 작업 제어에 이러한 프로세스를 추가하는 것이 일반적인 셸 기능이 될 것이라고는 기대하지 않습니다. 필요한 경우 zsh용 모듈이 쉘 지원을 추가할 수 있을 것이라고 생각합니다. 나는 실제로 이 작업을 수행하기 위해 zsh 패키지의 일부가 아닌 zsh 모듈이나 이를 처리할 수 있는 다른 쉘을 찾지 않았습니다.