bash: tidak ada kontrol pekerjaan di shell ini

8

Saya memiliki sistem Linux minimal.

init adalah /bin/bash, hanya perpustakaan minimal /lib/, /dev/dihuni secara statis, tidak ada daemon yang berjalan (tidak ada udev, ..)

Saat bash dimulai, saya mendapatkan kesalahan berikut:

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

Ketika saya mulai bash dengan strace, saya mendapatkan output berikut:

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

Sepertinya, bash tidak bisa dibuka /dev/tty. Tetapi /dev/ttyada di /dev/dan memiliki izin yang benar:

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

Kenapa tidak bisa bashdibuka /dev/tty? Dan apa artinya ENXIOkesalahan itu?

Martin Vegter
sumber

Jawaban:

4

init adalah /bin/bash

Seperti yang saya katakan di https://unix.stackexchange.com/a/197472/5132 , init=/bin/shtidak mendapatkan sistem file "API" terpasang, crash dalam mode canggung tanpa cache flush ketika satu jenis exit ( https: //unix.stackexchange .com / a / 195978/5132 ), dan secara umum membiarkannya (super) pengguna untuk secara manual melakukan tindakan yang membuat sistem dapat digunakan secara minimal.

Salah satu tindakan tersebut (jika Anda ingin menggunakan shell kontrol pekerjaan, seperti yang tampaknya Anda lakukan) adalah mendapatkan terminal pengendali . /dev/ttybukan perangkat terminal yang sebenarnya. Ini adalah perangkat yang mengalihkan ke terminal kontrol proses pembukaan apa pun itu. Jika tidak memilikinya , karena proses # 1 tidak dimulai dengan (dan biasanya sepanjang waktu ketika program manajer sistem nyata dijalankan sebagai proses # 1), maka membuka perangkat gagal.

Sistem Anda terlalu minim. Anda perlu menjalankan program yang mengatur terminal pengendali, menginisialisasi sesi yang tepat, dan mungkin melakukan beberapa minimum minimal manajemen sistem seperti mematikan dengan benar dan bersih, yang kemudian menjalankan shell kontrol pekerjaan Anda.

Bacaan lebih lanjut

JdeBP
sumber
Terima kasih. Bisakah Anda menjelaskan bagaimana saya bisa "mengatur terminal pengendali / memperoleh terminal pengendali"?
Martin Vegter
@MartinVegter Gunakan init BusyBox.
Gilles 'SO- stop being evil'