2015-08-19 6 views
7

Ich versuche, ein kleines Init-Skript statt Sysvinit, die mich in einer Shell ablegt. Mein Code für den Init-Skript ist:Was kann die sh: Terminal-Prozessgruppe (-1) nicht unangemessene ioctl für Gerätefehler bedeuten?

#!/bin/sh 

PATH=/sbin:/bin:/usr/sbin:/usr/sbin 

mount -t proc proc /proc 
mount -t sysfs sysfs /sys 
mount -t devtmpfs none /dev 

exec sh 

Aber wenn es mich in der Schale fällt dieser Fehler angezeigt:

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

Der Befehl tty kehrt /dev/console. Ich bin als root angemeldet und die Befehle, die ich ausprobiert habe, funktionieren korrekt.

+1

Ich habe den Eindruck, dass eine Shell-Eingabe dieses Init-Skripts keinen Zugriff auf ein Gerät wie 'tty0' ermöglicht, sondern nur auf '/ dev/console'. Wenn Sie jedoch die Shell mit '/ sbin/getty -l sh -n 38400 tty0' aufrufen, erhalten Sie Zugriff und starten die Shell auf'/dev/tty0'. – Arnold

+0

Welche Shell und Betriebssystem ist das? Du hast '/ usr/sbin' zweimal in deinem' PATH'. – Jens

Antwort

1

Diese Fehlermeldung bedeutet wahrscheinlich Shell ruft tcsetpgrp() und zurück errno=ENOTTY. Das kann passieren, wenn der Shell-Prozess kein kontrollierendes Terminal hat. Der Kernel stellt das nicht vor dem Ausführen von init auf /dev/console.

Sie haben die Lösung bereits entdeckt: Verwenden Sie ein echtes Terminal wie /dev/tty0.

Verwandte Themen