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列で)。