사용될 setpgrp
vi
때(및 다른 tty 프로그램)는 사용되지 않을 때와 완전히 다르게 작동합니다 setpgrp
. 예:
perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(exec qw(bash -c),qq(vi foo))); wait'
이것은 훌륭하게 작동하며 호출될 수 있습니다 vi foo
. 하지만 다음을 추가하세요 setpgrp
.
perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(setpgrp;exec qw(bash -c),qq(vi foo))); wait'
그러면 그다지 효과적이지 않습니다.
GNU/Linux(Mint), FreeBSD, OpenBSD, Solaris, HPUX, AIX, Dragonfly에서 테스트되었습니다. 모두 비슷한 동작을 보였습니다.
왜? 어떻게든 프로세스 그룹을 생성하고 여전히 tty 도구를 생성할 수 있습니까 vi
?
배경
위의 내용은 프로세스 대신 프로세스 그룹을 종료하여 전체 프로그램의 작은 부분을 제거할 수 있는 GNU Parallel의 가능한 확장의 일부입니다. 따라서 "실행" 답변은 vi foo
유용한 답변이 아닙니다.
답변1
setpgrp
Darwin/MacOS(BSD 기반) 매뉴얼 페이지 에서 :
호출 프로세스가 아직 세션 리더가 아닌 경우 setpgrp()는 호출 프로세스의 프로세스 그룹 ID를 호출 프로세스의 프로세스 그룹 ID로 설정합니다. 이 작업으로 생성된 새 세션에는 제어 터미널이 없습니다.
이것이 당신의 대답입니다.