다음을 사용하여 프로세스를 실행한다고 가정해 보겠습니다.
myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1
얼마 후에 는 1234라는 pid
프로세스 만 남게 됩니다 myapp
. 모든 플래그가 포함된 명령을 가져오고 출력을 myapp.log
어떤 방식 으로 리디렉션할 수 있는 방법이 있습니까 pid
?
답변1
ps -o args= -p "$pid"
프로세스가 이후에 인수 목록을 덮어쓰지 않았다면 프로세스가 실행한 마지막 명령(또는 명령을 실행하지 않은 경우 상위 명령이 실행한 명령...)에 제공된 인수 목록을 알려줍니다.
ps
공백으로 연결된 인수 목록이 표시되고 한도에 도달합니다. 일부 구현에서는 ps
몇 가지 옵션을 추가하여 -w
이를 늘릴 수 있습니다 . Linux에서는 에서 NUL 바이트로 구분된 인수 목록을 볼 수 있습니다 /proc/$pid/cmdline
.
lsof +fg -ap "$pid" -d 0-2
프로세스의 stdin, stdout 및 stderr 파일 설명자가 가리키는 내용과 해당 파일 설명자가 열린 모드(예: 리디렉션을 사용하는 POSIX 쉘에서 W,AP
와 같이 쓰기 전용이 추가됨 ) 를 알려줍니다 .>>
답변2
명령 을 사용 하고 스위치를 사용하여 ps
확인하려는 pid를 지정하여 전체 목록 또는 더 자세한 긴 목록을 제공할 수 있습니다.-p
-f
-l
출력 예:
$ sleep 60 &
[1] 31441
$ ps -lp 31441
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 31441 31319 0 80 0 - 1423 hrtime pts/3 00:00:00 sleep
$ ps -fp 31441
UID PID PPID C STIME TTY TIME CMD
root 31441 31319 0 10:44 pts/3 00:00:00 sleep 60
그러나 이렇게 하면 로그 파일에 원하지 않는 헤더 줄이 출력됩니다. -h
pid가 1234인 경우 다음 옵션을 사용하여 정리할 수 있습니다.
ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1
>>
로그 파일에 추가하기 위해 리디렉션된 출력을 사용했습니다 .
답변3
를 사용하면 ps -f
매개변수 목록을 검사하고 이를 임의의 파일로 리디렉션할 수도 있습니다.
따라서 이 경우에는 다음을 사용하십시오.ps -ef | grep 1234 > myapp.log
이것을 확인해주세요ps 매뉴얼 페이지.