프로세스를 백그라운드로 옮기고 출력을 끄는 방법은 무엇입니까?


11

터미널에서 프로세스를 시작하고 실행되는 동안 표준 오류로 출력을 보냅니다. 프로세스를 백그라운드로 옮기고 동시에 침묵시키고 싶습니다.

과정을 중지하고 사용하여 다시 시작하지 않고 할 수있는 방법이 있나요 &> /dev/null 2>&1? bg 대상 프로세스의 출력 설명자를 수행 하고 변경할 수 있는 명령이 있는지 궁금합니다 .

답변:


9

너무 늦었 어 프로세스 가 시작된 후 쉘은 프로세스 파일 디스크립터를 더 이상 제어 할 수 없으므로 쉘 명령으로이를 침묵 시킬 수 없습니다 .

당신은 시도 할 수 죽일SIGHUP프로세스에. 프로세스가 올바르게 처리하면 tty 제어 에서 분리해야합니다 . 불행히도 많은 소프트웨어는 소프트웨어를 올바르게 처리하지 않고 단순히 죽습니다.


프로세스를 백그라운드로두기 위해 CTRL + Z를 수행 할 수 없습니까? 그것은 프로세스를 침묵시키지 않으며, 로그 아웃하면 프로세스도 종료한다고 생각합니다.
Roy Rico

1
@RoyRico는 살인SIGSTOP프로세스에 (또는 당신이 말한대로 CTRL + Z를하고 ) 과정을 침묵하지 않습니다. 프로세스를 중지합니다!
andcoz

5

터미널에서 실행되는 프로세스에는 stdin, stdout 및 stderr이 터미널에 바인딩되어 있으며 해당 터미널에 대한 제어권을 다시 얻지 않으면 아무것도 할 수 없습니다. 그러나 실제로 그렇게 할 수있는 까다로운 도구가 있습니다. 이 예제를 살펴보십시오 . 그리고 retty거기에 언급 된 다른 프로그램들 .


3

나는 출력을 침묵 시키기에는 너무 늦다는 andcoz에 동의하지 않습니다.

프로세스가 포 그라운드에서 실행 중이라고 가정하면 프로세스 Ctrl-Z를 일시 중단하는 데 사용 하십시오. 그렇게하면 작업 번호와 프로세스 ID가보고됩니다. bg %1(작업 # 1)을 사용하여 프로세스를 백그라운드로 이동할 수 있습니다 . 이렇게하면 프로세스가 백그라운드로 이동하지만 출력을 끄지 않습니다. 출력을 끄려면 gdb모든 출력을로 리디렉션 하는 데 사용할 수 있습니다 /dev/null.

이것은 이전에 /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 에 아주 잘 설명되어 있습니다 .


0

또 다른 명령 줄 도구는 detach입니다. 최신 버전은 stdin, stdout 및 stderr 용 파일을 사용하고 포 그라운드에서 실행하는 pidfile 작성을 지원합니다. (웹 사이트 detach에서도 유사한 도구에 대해 설명합니다.)

http://inglorion.net/software/detach/

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