작업 제어 기능이 있는 쉘을 사용할 때 각 파이프는 일반적으로 자체 프로세스 그룹에 배치됩니다.
하위 프로세스가 대화형 프로그램(예: 편집기)에서 생성되면 하위 프로세스는 일반적으로 편집기와 동일한 프로세스 그룹에 있습니다. 이는 편집기가 백그라운드로 전환되면 하위 프로세스도 중지됨을 의미합니다.
이는 하위 프로세스 자체가 PDF 뷰어와 같은 그래픽 프로그램인 경우 바람직하지 않습니다 okular
.
이 경우 호출할 올바른 전략은 ( vi
구문 사용) 입니다.
:!set -m;okular %.pdf&
즉, 뷰어를 백그라운드 프로세스로 호출하기 전에 하위 쉘이 (작업) 모니터 옵션을 활성화하도록 강제합니까? (하위 쉘은 에 의해 호출될 때 대화형이 아니므 system()
로 모니터링 옵션은 기본적으로 꺼져 있습니다.)
답변1
예, set -m
한 가지 방법입니다. 타이핑이 덜 필요한(사전 준비 없음) 방법이 생각나지 않습니다.
Linux에서 또 다른 접근 방식은 명령 앞에 setsid
. 타이핑하는 양은 동일하지만 구두점이 적어서 더 편리할 수도 있습니다.
또 다른 접근 방식은 중간 대화형 셸을 실행하는 것입니다. 하지만 여전히 타이핑은 꽤 어색합니다.
setsid okular %.pdf&
set -m;okular %.pdf&
sh -ic 'okular %.pdf'&