리눅스 서버에서 다른 세션에서 실행중인 프로세스에 접근해야할 일이 생겼다.
이리저리 알아보니 다음과 같은 방법들이 있었다. (대체 안되는게 뭐냐..)
- strace:
strace
는 시스템 호출 및 시그널을 추적하는 데 사용되는 도구입니다. 이 도구를 사용하면 프로세스가 시스템에게 무엇을 요청하는지 확인할 수 있습니다. 출력을 인터셉트하려면write()
또는writev()
같은 시스템 호출을 주목하면 됩니다.- 예:bashCopy code
strace -e write -p PID
위 명령은PID
로 지정된 프로세스의write()
시스템 호출을 모니터링합니다.
- /proc 파일 시스템:
/proc/PID/fd/1
은 표준 출력에 연결된 파일 디스크립터입니다.cat /proc/PID/fd/1
명령을 사용하여 해당 프로세스의 표준 출력을 읽을 수 있습니다. 하지만 이 방법은 실시간 출력 스트림을 제공하지 않습니다.
- screen 또는 tmux:
screen
이나tmux
를 사용하면 여러 터미널 세션을 관리할 수 있습니다.- 프로세스를
screen
이나tmux
세션 내에서 실행하면, 해당 세션을 다른 터미널에서도 연결하여 같은 출력을 확인할 수 있습니다.
- Named pipes (FIFO):
- Named pipe를 사용하여 프로세스의 출력을 다른 프로세스로 전달할 수 있습니다.
- 예시:bashCopy code
mkfifo /tmp/myfifo command > /tmp/myfifo # In Session 1 cat /tmp/myfifo # In Session 2
- 리다이렉션:
- 다른 세션에서 실행중인 프로세스의 출력을 파일로 리다이렉트하고, 다른 세션에서 해당 파일을
tail -f
로 모니터링하는 방법도 있습니다.
- 다른 세션에서 실행중인 프로세스의 출력을 파일로 리다이렉트하고, 다른 세션에서 해당 파일을
주의: 다른 세션에서 실행중인 프로세스의 출력을 인터셉트하려면 적절한 권한이 필요합니다. 또한 strace
같은 도구는 프로세스에 영향을 줄 수 있으므로 실제 프로덕션 환경에서는 주의해야 합니다.