다른 세션에서 실행중인 프로세스에 인터셉트 하기

LINUX IT

리눅스 서버에서 다른 세션에서 실행중인 프로세스에 접근해야할 일이 생겼다.
이리저리 알아보니 다음과 같은 방법들이 있었다. (대체 안되는게 뭐냐..)

  1. strace:
    • strace는 시스템 호출 및 시그널을 추적하는 데 사용되는 도구입니다. 이 도구를 사용하면 프로세스가 시스템에게 무엇을 요청하는지 확인할 수 있습니다. 출력을 인터셉트하려면 write() 또는 writev() 같은 시스템 호출을 주목하면 됩니다.
    • 예:bashCopy codestrace -e write -p PID 위 명령은 PID로 지정된 프로세스의 write() 시스템 호출을 모니터링합니다.
  2. /proc 파일 시스템:
    • /proc/PID/fd/1은 표준 출력에 연결된 파일 디스크립터입니다.
    • cat /proc/PID/fd/1 명령을 사용하여 해당 프로세스의 표준 출력을 읽을 수 있습니다. 하지만 이 방법은 실시간 출력 스트림을 제공하지 않습니다.
  3. screen 또는 tmux:
    • screen이나 tmux를 사용하면 여러 터미널 세션을 관리할 수 있습니다.
    • 프로세스를 screen이나 tmux 세션 내에서 실행하면, 해당 세션을 다른 터미널에서도 연결하여 같은 출력을 확인할 수 있습니다.
  4. Named pipes (FIFO):
    • Named pipe를 사용하여 프로세스의 출력을 다른 프로세스로 전달할 수 있습니다.
    • 예시:bashCopy codemkfifo /tmp/myfifo command > /tmp/myfifo # In Session 1 cat /tmp/myfifo # In Session 2
  5. 리다이렉션:
    • 다른 세션에서 실행중인 프로세스의 출력을 파일로 리다이렉트하고, 다른 세션에서 해당 파일을 tail -f로 모니터링하는 방법도 있습니다.

주의: 다른 세션에서 실행중인 프로세스의 출력을 인터셉트하려면 적절한 권한이 필요합니다. 또한 strace 같은 도구는 프로세스에 영향을 줄 수 있으므로 실제 프로덕션 환경에서는 주의해야 합니다.