SoX에서 "nohup" 및 "disown"이 작동하지 않는 이유("play"라고 함)

SoX에서 "nohup" 및 "disown"이 작동하지 않는 이유("play"라고 함)

다음 명령을 실행할 수 있습니다.

$ play mylist.m3u

음악이 시작됩니다.

그런 다음 Ctrl-Z를 눌러 작업을 일시 중지하고 명령을 실행하여 bg백그라운드에서 실행되도록 할 수 있습니다.

그러나 실행 disown하고 exit음악 재생이 중지되면 play명령이 계속 표시되는데 도 마찬가지입니다 ps.

음악이 계속 흘러나왔으면 좋겠어요.

또한 매우 흥미롭다

나는 명령을 실행한다

$ play mylist.m3u &

과연 음악아니요놀다. 작업이 stopped상태로 표시됩니다.

명령을 실행할 수도 있습니다.

$ nohup play mylist.m3u &

그리고 음악이 재생되지 않습니다. 작업이 즉시 중지됩니다.

하지만,

$ nohup play mylist.m3u

실제로 음악이 재생되고 있었지만 예전처럼 부정할 수는 없었습니다.


이 모든 것이 연관되어 있는 것 같습니다.

대부분의 프로그램은 disowned 또는 Runtime에서는 잘 작동 nohup하지만 SoX에서는 잘 작동하지 않습니다.

이유를 아는 사람 있나요?

답변1

저와 같이 이 문제에 직면하여 마침내 야구와 관련되지 않은 내용을 Google에서 검색하여 실제 해결책을 원하는 드문 사람들을 위해:

$ play whatever.wav &>/dev/null </dev/null &

멈추지 않고 백그라운드에서 실행됩니다.

* 이 빨간색레드 삭스보스턴의놀다야구에서 일부 선수들은 주목받는 것보다 주목받는 것을 선호하는 것 같습니다.배경. 투덜거리다.

답변2

SoX는 입력 및 출력을 원하거나 필요로 합니다... 콘솔에 "play xxxx"를 입력하여 정상적으로 실행할 수 있으며 stdin과 stdout(및 stderr)이 모두 연결됩니다.

작업을 백그라운드에 배치하면(& 사용) 작업이 시작된 다음 stdin 및 stdout에 대한 액세스를 기다리고 있기 때문에 일시 중지됩니다.

직업을 "nohup"할 때도 같은 일이 발생합니다. 키보드 입력이 필요한 경우 표준 입력에 대한 액세스를 받을 때까지 시스템에 의해 "차단"되고 일시 중지됩니다.

프로세스를 거부하면 프로세스를 시작한 콘솔에 연결된 표준 입력 및 표준 출력에서 ​​해당 프로세스가 효과적으로 차단됩니다.

여전히 "실행 중"이지만 표준 입력 및 표준 출력에 대한 액세스를 기다리고 있기 때문에 시스템에 의해 차단(일시 중지)됩니다.

답변3

-q 옵션을 사용하면 SoX가 /dev/null로 리디렉션하지 않고 std-what에 쓰지 않도록 할 수도 있습니다.

$ play filename -q &

관련 정보