bash: không kiểm soát công việc trong shell này


8

Tôi có một hệ thống Linux tối thiểu.

init là /bin/bash, chỉ có tối thiểu các thư viện trong /lib/, /dev/được điền tĩnh, không có trình tiện ích nào đang chạy (không có udev, ..)

Khi bash bắt đầu, tôi gặp lỗi sau:

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

Khi tôi bắt đầu bash với strace, tôi nhận được kết quả sau:

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

Có vẻ như, bash không thể mở /dev/tty. Nhưng /dev/ttytồn tại trong /dev/và có quyền chính xác:

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

Tại sao không thể bashmở /dev/tty? Và ENXIOlỗi này có nghĩa là gì?

Câu trả lời:


4

init là /bin/bash

Như tôi đã nói tại https://unix.stackexchange.com/a/197472/5132 , init=/bin/shkhông cài đặt hệ thống tệp "API", gặp sự cố một cách vô duyên khi không có bộ đệm ẩn khi một loại exit ( https: //unix.stackexchange .com / a / 195978/5132 ) và nói chung để cho người dùng (siêu) thực hiện thủ công các hành động làm cho hệ thống có thể sử dụng tối thiểu.

Một trong những hành động đó (nếu bạn muốn sử dụng trình điều khiển công việc, như bạn rõ ràng làm) là có được một thiết bị đầu cuối kiểm soát . /dev/ttykhông phải là một thiết bị đầu cuối thực tế. Đây là một thiết bị chuyển hướng đến bất kỳ thiết bị đầu cuối kiểm soát nào của quá trình mở. Nếu nó không có , vì quy trình số 1 không bắt đầu (và thường là khi chương trình quản lý hệ thống thực sự đang được chạy như quy trình số 1), thì việc mở thiết bị sẽ thất bại.

Hệ thống của bạn quá tối thiểu. Bạn cần chạy một chương trình thiết lập một thiết bị đầu cuối điều khiển, khởi tạo một phiên thích hợp và có thể thực hiện một số điều tối thiểu trong quản lý hệ thống như tắt máy đúng cách và sạch sẽ, sau đó chạy trình điều khiển công việc của bạn.

đọc thêm


cảm ơn. Bạn có thể giải thích làm thế nào tôi có thể "thiết lập một thiết bị đầu cuối kiểm soát / mua thiết bị đầu cuối kiểm soát"?
Martin Vegter

@MartinVegter Sử dụng init của BusyBox.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.