레이블이 stdout인 게시물을 표시합니다. 모든 게시물 표시
레이블이 stdout인 게시물을 표시합니다. 모든 게시물 표시

process 파일 이용하기

# 리눅스는 모든게 파일이다. 프로세스도 /proc/프로세스ID 파일로 확인할 수 있다.
# 현재 프로세스가 실행중이면 커맨드라인 파악
cat /proc/$$/cmdline

# 특정 (httpd) 프로세스의 쉘 환경변수 중 ysoftman 값 파악
sudo cat /proc/$(ps -e -o pid,command | command grep -i httpd | head -n1 | awk '{print $1}')/environ | tr '\0' '\n' | grep -iE ^ysoftman

# 참고로 현재 프로세스(pid)의 stdout 을 보기 위해 
# 새 터미널에서 cat /proc/{pid}/fd/1 를 실행후 입력하면 문자가 개별적으로
# pid 가 실행중인 /dev/pts/1 과 cat 이 실행중인 /dev/pts/2 중 한쪽에만 출력된다.


Linux/Windows 프로그램의 stdout stderr 함께 출력하기

다음과 같은 redirection(스트림을 방향을 변경하는) 연산자를 사용할 수 있다.
< : 입력하기
> : 출력하기
>> : 출력하기(출력 대상의 내용에 이어붙이기)
0 : 표준 입력 장치(stdin)
1 : 표준 출력 장치(stdout)
2 : 표준 에러 장치(stderr)

program.exe 라는 프로그램이 있으면,

예1)
stdout 만 파일로 저장하여 보고 싶다면
program > result.txt   또는
program >> result.txt  (기존result.txt 파일 뒤에 붙이기)

예2)
stderr 만 파일로 저장하여 보고 싶다면
program 2> result.txt

예3)
2>&1 : stderr 를 stdout 으로 리다이렉션
아래와 같이하면과 stdout, stderr 를 /dev/null 한번에 보낼 수 없다.
# rm -fv exist_file not_exist_file 2>&1 /dev/null
다음과 같이 /dev/null 뒤에 2>&1 을 명시해서 stdout, stderr 리다이렉트할(버릴) 수 있다.
fd(/dev/null)이 먼저 파악되어 stdout > fd 로 갈 수 있도록 한 상태에서, stderr(2) > stdout(1) 로 보내야 한다.
rm -fv exist_file > /dev/null 2>&1
# rm -f 옵션을 사용하면 없는 파일도 에러메시지 없이 동작해서 뺏음
rm -v not_exist_file > /dev/null 2>&1