Linux에서 분리 후 명령을 내리기 위해 나중에 다시 돌아올 수 있는 프로세스를 어떻게 실행할 수 있습니까?

Linux에서 분리 후 명령을 내리기 위해 나중에 다시 돌아올 수 있는 프로세스를 어떻게 실행할 수 있습니까?

나는 현재 서버 호스팅 앱(주로 나 자신을 위한/학습 목적)을 개발 중이며 모든 것이 잘 작동하지만 그렇지 않은 경우도 있습니다. 일반적으로 Counter-Strike에 대해 잘 알고 계신 분이 얼마나 되는지 모르겠지만 서버와 모든 것을 시작합니다. 괜찮지만 분리해서(이것은 모두 Node.js로 작성되었습니다) 사용할 수 없거나 screen아무것도 할 수 없지만 기본적으로 서버의 레벨을 변경하고 싶다면 입력하거나 changelevel de_dust2시작할 수 있을 것입니다. 서버를 수동으로 서버에 연결했지만 분리되었기 때문에 이 프로세스에 명령을 내릴 수 있는 방법이 없습니다.

FIFO와 Unix 소켓 사용에 대해 읽었지만 그것이 하는 일은 나에게 다시 반향하는 것뿐입니다. FIFO를 이해하지 못한 것인지는 잘 모르겠지만 할 수 있다고 생각했습니다.

mkfifo /tmp/server echo "./startserver" > /tmp/server &

그리고 나중에 내가 원한다면

echo "changelevel de_dust2" > /tmp/server

명확하지 않다면 죄송합니다. 기본적으로 명령을 보내려는 데몬 프로세스가 있습니다.

답변1

"데몬" 프로세스가 파이프에서 읽는지 확인해야 합니다.

mkfifo /tmp/server
./startserver < /tmp/server &
sleep 10000 > /tmp/server &

나중에 무엇을 작성하든 의 표준 입력 /tmp/server/에 나타납니다 . 예를 들면 다음과 같습니다.startserver

echo "changelevel de_dust2" > /tmp/server

참고: sleep파이프를 열린 상태로 유지하려면 명령이 필요합니다. 각 echo명령은 끝날 때 파이프를 닫으려고 시도하여 종료될 수 있기 때문입니다 startserver.

답변2

세 가지 방법이 떠오릅니다. 데몬 프로세스가 stdin/out을 사용하는 한 통신에는 문제가 없어야 합니다.

  1. screen, 또는 유사한 솔루션을 사용하는 경우 tmux서버를 분리할 필요가 없습니다. 콘솔에 안전하게 "부착"된 상태로 유지하고 화면 자체를 분리할 수 있습니다.

  2. /proc/N/fd/{0,1}적절한 권한이 있는 한 통신에 사용할 수 있습니다 . 여기서 N은 데몬의 PID이고 fd0은 일반적으로 stdin이고 fd1은 N 프로세스의 stdout입니다.

  3. 명명된 파이프(FIFO)를 사용한 접근 방식은 본질적으로 정확하지만 절반만 ​​올바르게 수행하고 있습니다. 당신이 한 일은 프로세스의 stdout을 파이프로 변경한 것입니다. 즉, 데몬에 의해 stdout에 인쇄된 모든 내용이 예를 들어 cat에 의해 추출될 수 있는 파이프에 기록된다는 의미입니다. 파이프는 반이중 방식입니다. 즉, 하나의 입력과 하나의 출력만 연결할 수 있습니다. 필요한 것은 두 개의 파이프입니다. 하나는 입력용이고 다른 하나는 출력용입니다. 그런 다음 한 파이프를 통해 데몬에 보내는 모든 것이 거기에 도착하고 응답은 다른 파이프를 통해 파이프를 읽을 다른 프로그램으로 다시 이동합니다.

pin두 개의 파이프 와 가 있다고 가정합니다 pout. 다음을 실행합니다.

데몬 < 핀 > pout

그런 다음 다음과 같은 것을 실행해야합니다

고양이 삐죽 & 고양이 > 핀

의사소통을 하기 위해. 이것은 나쁜 예입니다. 비동기식이므로 경쟁 조건이 있을 수 있지만 아이디어를 얻으시기 바랍니다.

관련 정보