runit 기반 Linux 시스템에서 agetty를 실행하려고 하는데 다음과 같은 문제가 발생합니다.
sh: cannot set terminal process group (136) Inappropriate ioctl for device
sh: no job control in this shell
이 오류에 대해 잘 모르겠습니다. 어떤 아이디어가 있습니까?
agetty를 실행하는 스크립트는 다음과 같습니다.
#!/bin/sh
exec /sbin/agetty 38400 tty1 linux --noclear
어떤 도움이라도 좋을 것입니다.
답변1
사용 방법 setsid
은 다음과 같습니다.
#!/bin/sh
exec setsid /sbin/agetty 38400 tty1 linux --noclear
래퍼는 setsid
세션 리더로 agetty를 시작합니다(이 답변을 참조하세요)에 바인딩할 수 있습니다 tty1
.
다음 예에서 다른 동작을 볼 수 있습니다 ps
.
# ps xao pid,ppid,sid,tty,cmd
[...]
150 1 150 ? runsvdir
154 150 155 ? runsv agetty-3
157 154 157 tty3 -bash
152 150 152 ? runsv agetty-4
156 152 152 ? -bash
[...]
agetty-3
서비스를 이용하였고 setsid
, agetty-4
서비스를 이용하지 않았습니다. 따라서 tty3의 쉘은 세션 리더이며 해당 tty에 바인딩됩니다. tty4의 쉘은 감독자와 동일한 세션에 있으며 바인딩 해제되어 있습니다( ?
tty 열에서).