백그라운드 프로세스를 시작할 때 쉘 프로세스 정보를 숨기는 방법은 무엇입니까?


19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

이 두 메시지를 어떻게 / dev / null합니까? :

[1] 5232
[1]+  Done                    sleep 3

추신 : 그래서 프로세스의 출력이 필요하지만 언급 된 두 줄은 필요하지 않습니다!


대화식으로 실행할 때만 해당 라인을 얻습니다. 예를 들어 스크립트에서 실행하면 안됩니다.
derobert

답변:


24

프로그램 출력이 아니며 유용한 쉘 정보입니다.

어쨌든 서브 쉘과 출력 리디렉션을 사용하여 숨길 수 있습니다

( sleep 3 & ) > /dev/null 2>&1

2
"2> / dev / null"이 좋은 것입니다. 프로세스에서 출력이 필요합니다
LanceBaynes

@LanceBaynes 프로세스는 stderr에 무언가를 쓸 수도 있습니다.
Chris Down

2
불행히도 $로 pid의 검색을 물리칩니다!
Deleplace

3

bash 또는 zsh disown %1에서 셸을 호출 하여 작업을 잊어 버리도록 할 수 있습니다 . 그러면 쉘은 해당 작업에 대한 메시지를 인쇄하지 않으며 jobsSIGHUP을 실행 하거나 보낼 때이를 표시하지 않습니다 . zsh에서 &!대신 작업을 시작하는 것은 즉시 작업 &을 호출 disown하는 것과 같습니다 .


1

@Gilles에 대해서는 (아직) 설명 할 수 없지만 & disownbash에서도 작동 하는 것 같습니다 .

sleep 3 & disown

이것은 Bash v.4.1.2에서 작동하지 않는 것 같습니다
Alexej Magura

1

시험:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

그리고 출력PID를 모두 숨겼습니다 . $ REPLY 에서 PID 를 계속 검색 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.