매우 짧은 프로세스의 환경 변수를 얻는 방법은 무엇입니까?

매우 짧은 프로세스의 환경 변수를 얻는 방법은 무엇입니까?

디버깅 목적으로 환경 변수를 확인하려는 매우 짧은 프로세스가 있습니다. 인간의 관점에서 볼 때 그 과정은 즉각적입니다. 이 예는 이를 더 잘 보여줍니다.

user:~$ ps aux | grep grep
user   2349  0.0  0.0   4384   840 pts/1    S+   14:47   0:00 grep --color=auto grep

이 프로세스의 PID는 2349입니다. 환경 변수(또는 기타 정보)를 확인하는 경우:

#Pretty print of environmental variables#
user:~$ xargs --null --max-args=1 echo < /proc/2349/environ
bash: /proc/2349/environ: No such file or directory

이 과정을 거치면 정보가 사라집니다.

프로세스가 완료된 후 변수를 나열할 수 있도록 프로세스를 실행하기 전에 무엇을 해야 합니까?

답변1

당신이 가지고 있다면strace

strace -v -e execve cmd

변수 값이 너무 길면 다음을 사용하여 문자열 크기를 늘릴 수 있습니다.-s

strace -v -s 10000 -e execve cmd

답변2

바이너리를 한쪽으로 옮기고 환경을 파일로 덤프한 다음 원본 파일을 호출하는 래퍼를 만듭니다.

예를 들어

mv ${cmd} ${cmd}.moved

그런 다음 새 파일을 만듭니다 ${cmd}.

#!/bin/sh
env > /tmp/cmd-env.log
exec ${cmd}.moved "$@"

그리고 권한을 잊지 마세요.

chmod a+rx ${cmd}

그런 다음 다시 실행될 때까지 기다렸다가 환경에서 읽습니다 /tmp/cmd-env.log.

마지막으로 원래 프로그램을 원래 위치로 되돌립니다.

mv ${cmd}.moved ${cmd}

물론 래퍼 bin$PATH.

관련 정보