추가 읽기

추가 읽기

나는 최소한의 Linux 시스템을 가지고 있습니다.

init /bin/bash, 최소한의 라이브러리만 정적으로 채워지고 /lib/데몬 /dev/이 실행되지 않습니다(udev, .. 없음).

Bash가 시작되면 다음 오류가 발생합니다.

bash: cannot set terminal process group (-1) inappropriate ioctl for device
bash: no job control in this shell

strace를 사용하여 bash를 시작하면 다음과 같은 출력이 표시됩니다.

rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
open("/dev/tty", O_RDWR|O_NONBLOCK)     = -1 ENXIO (No such device or address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0

....

readlink("/proc/self/fd/0", "/dev/console"..., 4095) = 12
stat("/dev/console", {st_mode=S_IFCHR|0600, st_rdev=makedev(5, 1), ...}) = 0
open("/dev/console", O_RDWR|O_NONBLOCK) = 3

Bash를 열 수 없는 것 같습니다 /dev/tty. 그러나 /dev/tty존재 /dev/하며 올바른 권한이 있습니다.

ll /dev/tty*
crw-rw-rwT 1 root root 5, 0  2014-Sep-29  23:39:47  dev/tty
crw------T 1 root root 4, 0  2015-Dec-23  20:10:18  dev/tty0
crw------T 1 root root 4, 1  2015-Dec-23  20:10:18  dev/tty1

bash열 수 없나요 /dev/tty? 이 오류는 무엇을 ENXIO의미합니까?

답변1

초기화는/bin/bash

내가 말했듯이https://unix.stackexchange.com/a/197472/5132, init=/bin/sh"API" 파일 시스템이 마운트되지 않고 유형 exit (https://unix.stackexchange.com/a/195978/5132), 일반적으로 시스템을 최소한으로 사용 가능하게 만드는 작업을 수동으로 수행하는 것은 (수퍼) 사용자에게 맡겨집니다.

이러한 작업 중 하나(분명히 작업 제어 셸을 사용하려는 경우)는 다음과 같습니다.제어 터미널 가져오기. /dev/tty실제 단말 장치가 아닙니다. 열려 있는 프로세스의 제어 터미널로 리디렉션하는 장치입니다. 그 경우아니요, 프로세스 #1이 시작되지 않았기 때문에 장치를 여는 데 실패했습니다(실제 시스템 관리자 프로그램이 프로세스 #1로 실행 중일 때 항상 발생함).

당신의 시스템은또한최저한의. 제어 터미널을 설정하고, 적절한 세션을 초기화하고, 적절하고 완전한 종료와 같은 가장 기본적인 시스템 관리 작업 중 일부를 수행한 다음 작업 제어 셸을 실행하는 프로그램을 실행해야 합니다.

추가 읽기

답변2

바라보다장치 오류에 대한 sh:cannot setterminal 프로세스 그룹(-1) 속성 ioctl은 무엇을 의미합니까?이 오류에 대한 추가 정보. 앞서 언급했듯이 환경이 올바르게 설정되지 않았습니다. 작업 제어(포그라운드 및 백그라운드 프로세스 처리)가 제대로 작동하려면 환경에서 호출 프로세스 ID, 프로세스 그룹 ID 및 세션 ID가 올바르게 설정되어야 합니다. 또한 프로세스에는 tty가 있어야 하며 제어 터미널이어야 합니다.

발생한 오류는 발생한 오류로 인해 프로세스 ID, 프로세스 그룹 ID 및 세션 ID가 정확함을 나타냅니다. 그러나 쉘이 제어 터미널이 아니므로 "-1" 오류가 발생합니다.

tty를 제어 터미널로 설정하려면 ioctl(your_fd, TIOCSCTTY,0)C API 호출을 사용하여 프로그램에서 이를 수행할 수 있습니다.

관련 정보