다음과 같이 터미널에서 프로세스를 분리했습니다.
$ process &
터미널은 오랫동안 닫혀 있었지만 process
여전히 실행 중이므로 일부 명령을 프로세스의 표준 입력으로 보내고 싶습니다. 그게 가능합니까?
답변1
예. 먼저 파이프를 만듭니다:
mkfifo /tmp/fifo
. gdb를 사용하여 프로세스에 연결합니다.
gdb -p PID
그런 다음 stdin을 닫고 call close (0)
다시 엽니다.call open ("/tmp/fifo", 0600)
마지막으로 다음을 작성합니다(gdb가 중단될 수 있으므로 다른 터미널에서).
echo blah > /tmp/fifo
답변2
원래 터미널에 더 이상 접근할 수 없는 경우...
reptyr
당신이 원하는 것일 수도 있습니다. 한번 살펴보세요https://serverfault.com/a/284795/187998
거기에서 인용하자면:
구경하다렙텔, 정확히 그 일을합니다. github 페이지에는 모든 정보가 있습니다.Reptyr - 프로그램을 "재컴파일"하는 도구입니다.
reptyr는 기존 실행 중인 프로그램을 가져와 새 터미널에 연결하는 유틸리티입니다. SSH를 통해 장기 실행 프로세스를 시작했지만 종료해야 하며 이를 중단하고 싶지 않으십니까? 화면을 시작하고 reptyr로 잡은 다음 SSH 세션을 종료하고 집으로 돌아가세요.
용법
렙텔 PID
"reptyr PID"는 ID PID가 있는 프로세스를 가져와 현재 터미널에 연결합니다.
일단 연결되면 프로세스는 새 터미널에서 입력을 받아 ^C 및 ^Z를 포함하여 새 터미널에 출력을 씁니다. (안타깝게도 백그라운드로 설정하면 이전 터미널에서 여전히 "bg" 또는 "fg"를 실행해야 합니다. 이는 쉘을 패치하지 않으면 합리적인 방법으로 수정되지 않을 수 있습니다.)
편집자는 " reptyr
하위 프로세스가 있는 프로세스를 가져올 수 없습니다. 또는 하위 프로세스(reptyr 버전 0.6.2)가 제한적으로 지원됩니다."라고 주장합니다.질문,질문
답변3
나는 당신이 할 수 없다고 확신합니다.
사용법을 확인하십시오 ps x
. 프로세스에 ?
as가 있는 경우제어 터미널, 더 이상 입력을 보낼 수 없습니다.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
9947
이 예에서는 유사한 작업을 수행하기 위해 입력을 보낼 수 있습니다 echo "test" > /dev/pts/1
. 9942
다른 프로세스에는 접근할 수 없습니다( ).
답변4
편집하다: Stephane Gimenez가 말했듯이, 그렇게 간단하지는 않습니다. 다른 터미널로만 인쇄할 수 있습니다.
다음을 사용하여 이 프로세스에 쓸 수 있습니다./프로세스. 위치해야 합니다/프로세스/PID/fd/0,매우 간단합니다.
echo "hello" > /proc/PID/fd/0
그것은 이루어져야합니다. 시도하지는 않았지만 프로세스가 계속 작동하는 한 작동할 것입니다.표준 입력파일 설명자. ls -l
에서 확인 하실 수 있습니다/프로세스/PID/fd/.
- /dev/null에 대한 링크인 경우 => 닫혀 있습니다.
- /dev/pts/X에 대한 링크나 소켓인 경우 => 열려 있습니다.
바라보다북면프로세스를 계속 실행하는 방법에 대한 자세한 내용입니다.