カスタムLinuxシステムはcrtl + cを使用してpingコマンドを終了できませんか?

カスタムLinuxシステムはcrtl + cを使用してpingコマンドを終了できませんか?

Busyboxバージョンを使用してルートファイルシステムをカスタマイズしました。1.36.1モニターキーボードにIPをctrl+c入力したpingときにデバイスをシャットダウンできない理由がわかりません。ただし、SSHを介してデバイスに接続すると、IPがping?で終了する可能性があります。ctrl+c同じだctrl+u

私は言及しましたエマルジョンしかし、私の問題は解決されませんでした。

しかし、私のシステムにはデスクトップ環境はありません。私のプロセッサはIntel x86_64ビットです。

#1 #stty -a(SSH接続)

speed 38400 baud; rows 41; columns 143; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

#stty -a(モニターキーボード)

speed 38400 baud; rows 37; columns 100; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

#2 #cat /etc/inittab (以前)

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

#cat /etc/inittab(新規)

::sysinit:/etc/init.d/rcS
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

#3 #echo $SHELL(SSH接続)

/bin/bash

#echo $SHELL(モニターキーボード)

/bin/sh

#4 #echo $TERM (SSH接続)

xterm

#echo $TERM(モニターキーボード)

xterm

#5 #tty(SSH接続)

/dev/pts/0

#tty(モニターキーボード)

/dev/console

#6 #ls -l /dev/console /dev/tty[0-9]

crw-rw----    1 root     root        5,   1 Jan  4 04:31 /dev/console
crw-rw----    1 root     root        4,   0 Jan  4 04:31 /dev/tty0
crw-rw----    1 root     root        4,   1 Jan  4 04:32 /dev/tty1
crw-rw----    1 root     root        4,   2 Jan  4 04:31 /dev/tty2
crw-rw----    1 root     root        4,   3 Jan  4 04:31 /dev/tty3
crw-rw----    1 root     root        4,   4 Jan  4 04:31 /dev/tty4
crw-rw----    1 root     root        4,   5 Jan  4 04:31 /dev/tty5
crw-rw----    1 root     root        4,   6 Jan  4 04:31 /dev/tty6
crw-rw----    1 root     root        4,   7 Jan  4 04:31 /dev/tty7
crw-rw----    1 root     root        4,   8 Jan  4 04:31 /dev/tty8
crw-rw----    1 root     root        4,   9 Jan  4 04:31 /dev/tty9

答え1

「モニターキーボード」stty -a出力にはあり、-isig -icanon -iextenSSHセッションではこれらの機能が有効になっています(-前にフラグはありません)。

man stty次のように説明します。

[-]icanon
特殊文字を有効にする:erase、kill、wasase、rpnt

[-]iexten
POSIX以外の特殊文字を有効にする

[-]isig
割り込み許可、終了、特殊文字の中断

したがって、-isigControl-C、Control-\、およびControl-Zの特殊機能は次のとおりです。閉鎖。同様に、、、などの-icanon機能も適用されません。モニターキーボードセッションでこの問題を解決できます。erasekillweraserprntstty isig icanon

これは、ログインプロセスの初期にTTYデバイス設定をよく知られた値に初期化する同様のプロセスを使用せずに直接起動/bin/shしたためです。/etc/inittabgetty

inittabログインせずに直接シェルを実行するには、必要なTTY初期化を直接実行する必要があります/etc/init.d/rcS。たとえば、次のようになります。

for i in 1 2 3 4 5 6; do
    stty -F /dev/tty$i isig icanon
done

SSHセッションでは、擬似TTYデバイス(単にPTY)が使用され、sshd自動的に初期化されます。

/dev/consoleコマンド出力の結果がttyやや疑わしいからです。本質的に、少なくともx86アーキテクチャでは、/dev/console現在アクティブなコンソールデバイスの互換性エイリアスです。通常(つまり、現在アクティブなKVM仮想コンソール)に接続できますが、カーネルブートオプションの/dev/tty0ように使用されるシリアルポートを指すこともできます。/dev/ttyS0console=

カーネルで次の設定オプションがすべて有効になっていますか?

  • CONFIG_VT_CONSOLE=y
  • CONFIG_HW_CONSOLE=y
  • CONFIG_VT_HW_CONSOLE_BINDING=y
  • あるいは、クラシックBIOSまたはUEFIなどの適切なフレームバッファコンソールドライバおよびCONFIG_VGA_CONSOLE=y/またはコンソールで最新の直接レンダリングGPUドライバを使用している場合は可能です。CONFIG_FRAMEBUFFER_CONSOLE=yCONFIG_FB_VESA=yCONFIG_FB_EFI=yCONFIG_DRM_FBDEV_EMULATION=y

コンソールデバイスノードの設定は正しいですか? Debian 12 システムにはls -l /dev/console /dev/tty[0-9]次の出力があります。

crw--w---- 1 root tty 5, 1 Nov 10 02:26 /dev/console
crw--w---- 1 root tty 4, 0 Nov 10 02:25 /dev/tty0
crw--w---- 1 root tty 4, 1 Jan 30 13:37 /dev/tty1
crw--w---- 1 root tty 4, 2 Nov 10 02:25 /dev/tty2
crw--w---- 1 root tty 4, 3 Nov 10 02:25 /dev/tty3
crw--w---- 1 root tty 4, 4 Nov 10 02:25 /dev/tty4
crw--w---- 1 root tty 4, 5 Nov 10 02:25 /dev/tty5
crw--w---- 1 root tty 4, 6 Nov 10 02:25 /dev/tty6
crw--w---- 1 root tty 4, 7 Nov 10 02:26 /dev/tty7
crw--w---- 1 root tty 4, 8 Nov 10 02:25 /dev/tty8
crw--w---- 1 root tty 4, 9 Nov 10 02:25 /dev/tty9

権限と所有権は、現在のログインとディストリビューションでこれを処理する方法によって異なりますが、州/マイナーデバイス番号(カンマとスペースで区切られた2桁)はまったく同じでなければなりません。

関連情報