프로세스가 실행된 명령

프로세스가 실행된 명령

다음 명령을 사용하여 프로세스를 실행했다고 가정합니다.

myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1

잠시 후 1234와 같은 프로세스만 남게 됩니다 pid. 모든 플래그가 포함된 명령을 얻고 출력을 어떻게든 myapp리디렉션할 수 있는 방법이 있습니까 ?myapp.logpid

답변1

ps -o args= -p "$pid"

프로세스가 나중에 인수 목록을 재정의하지 않은 경우 프로세스가 실행한 마지막 명령(또는 아무것도 실행하지 않은 경우 상위 명령...)에 제공된 인수 목록을 알려줍니다.

psps공백 과 몇 가지 옵션을 추가하여 일부 구현으로 늘릴 수 있는 한도까지 연결된 인수 목록을 보여줍니다 -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

그러나 이렇게 하면 로그 파일에 원하지 않는 헤더 줄이 출력됩니다. -hPID가 1234인 경우 옵션을 사용하여 이를 잘라낼 수 있습니다 .

ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1

>>로그 파일에 추가하기 위해 출력을 리디렉션했습니다 .

답변3

를 사용하면 ps -f인수 목록을 확인할 수 있고 이를 모든 파일로 리디렉션할 수도 있습니다.

따라서 이 경우에는 다음을 사용하십시오.ps -ef | grep 1234 > myapp.log

이것을 확인해주세요ps 매뉴얼 페이지.

관련 정보