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


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.