다음 명령을 사용하여 프로세스를 실행했다고 가정합니다.
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 매뉴얼 페이지.