터미널에서 프로세스를 시작하고 실행되는 동안 표준 오류로 출력을 보냅니다. 프로세스를 백그라운드로 옮기고 동시에 침묵시키고 싶습니다.
과정을 중지하고 사용하여 다시 시작하지 않고 할 수있는 방법이 있나요 &
과 > /dev/null 2>&1
? bg
대상 프로세스의 출력 설명자를 수행 하고 변경할 수 있는 명령이 있는지 궁금합니다 .
답변
너무 늦었 어 프로세스 가 시작된 후 쉘은 프로세스 파일 디스크립터를 더 이상 제어 할 수 없으므로 쉘 명령으로이를 침묵 시킬 수 없습니다 .
당신은 시도 할 수 죽일 을 SIGHUP
프로세스에. 프로세스가 올바르게 처리하면 tty 제어 에서 분리해야합니다 . 불행히도 많은 소프트웨어는 소프트웨어를 올바르게 처리하지 않고 단순히 죽습니다.
답변
터미널에서 실행되는 프로세스에는 stdin, stdout 및 stderr이 터미널에 바인딩되어 있으며 해당 터미널에 대한 제어권을 다시 얻지 않으면 아무것도 할 수 없습니다. 그러나 실제로 그렇게 할 수있는 까다로운 도구가 있습니다. 이 예제를 살펴보십시오 . 그리고 retty
거기에 언급 된 다른 프로그램들 .
답변
나는 출력을 침묵 시키기에는 너무 늦다는 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 에 아주 잘 설명되어 있습니다 .
답변
또 다른 명령 줄 도구는 detach
입니다. 최신 버전은 stdin, stdout 및 stderr 용 파일을 사용하고 포 그라운드에서 실행하는 pidfile 작성을 지원합니다. (웹 사이트 detach
에서도 유사한 도구에 대해 설명합니다.)