setpgrp로 인해 tty가 사라집니다.

setpgrp로 인해 tty가 사라집니다.

사용될 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

setpgrpDarwin/MacOS(BSD 기반) 매뉴얼 페이지 에서 :

호출 프로세스가 아직 세션 리더가 아닌 경우 setpgrp()는 호출 프로세스의 프로세스 그룹 ID를 호출 프로세스의 프로세스 그룹 ID로 설정합니다. 이 작업으로 생성된 새 세션에는 제어 터미널이 없습니다.

이것이 당신의 대답입니다.

관련 정보