폐기 된 프로세스를 어떻게 회수합니까?


12

이전의 많은 질문과 마찬가지로 화면에서 실행하고 싶은 작업을 실행하고 있음을 알았습니다. 연결을 끊어야했기 때문에 프로세스를 취소해야했습니다. 다시 연결 했으므로 프로세스가 여전히 실행되고 있음을 알 수 있습니다. 출력을보고 입력 할 수 있도록 프로세스를 "다시 회수"하는 방법은 무엇입니까?

이 질문은 잃어버린 stdin / out / err 핸들을 다시 열어야한다는 점에서 실행중인 프로세스를 화면으로 옮기는 것과 다릅니다.


답변:


6

이것은 중복 질문입니다 . 이미 실행중인 프로세스를 Screen 으로 옮기기 를 참조하십시오. retty 는 항상 추측 할 수는 있지만 실제로 시도하지 않은 것을 구현하는 자체 설명 끔찍한 해킹입니다. fd 0, 1을 찾습니다. , 및 2 (각각 표준 입력, 출력 및 오류) 프로세스에 대해 끔찍한 이상 기생충처럼 부착합니다.


나는이 프로그램에 대해 몰랐다. 비록 진실은 알지만 그것을 사용하는 것은 좋은 습관이 아니다! 좋은 대답이다.
Andrew M.

6

프로세스를 제거함으로써 터미널에서 발행 한 SIGHUP을 무시한다고 효과적으로 말하고 있습니다. 세션을 닫으면 (예 : bash)이 프로세스는 init가 소유하게됩니다. 따라서 소유권을 포기한 후 프로세스를 다시 소유하고 싶다고 말하면 다른 프로세스에서 소유권을 빼고 싶다는 말이 있습니다. 이것은 Linux에서 정상적으로 할 수 없습니다.


1
프로세스는 이와 같은 다른 프로세스를 소유하지 않습니다. 소유하지 않은 프로세스가 여전히 실행 중입니다.
mattdm

부모의 세션이 종료되면 그의 질문으로 알 수 있습니다. 이것을 반영하여 답변을 업데이트했습니다.
Andrew M.

부모 프로세스는 init로 변경되지만 소유권과 다릅니다. 프로세스의 EUID 및 UID는 원래 사용자의 프로세스와 UID로 유지됩니다. 그렇지 않으면 모든 사용자가 갑자기 다른 사용자로 코드를 실행하는 방식을 가지게되고 시스템 사용자는이를 악용 할 수 있으므로 잠재적으로 악용 될 수 있습니다.
mattdm

1
EUID / UID! = PPID. 권한이 아닌 프로세스 소유권에 대해 이야기하고 있습니다.
Andrew M.

예, "프로세스 소유권"이라는 용어의 의미를 제외한 모든 것에 동의합니다. 이것은 부모 프로세스가 아니라 프로세스와 연관된 사용자 ID를 나타냅니다. 혼동은 disownbash 특정 명령 으로 인한 것일 수 있습니다.이 명령은 이름에도 불구하고 실제로 프로세스 소유권 변경과 관련이 없습니다.
mattdm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.