Настройка и работа в Linux
adb5321d

Одно отличие - управляющий терминал


Один хитрый аспект выполнения qlogin из оболочки -- это свойство управляющего терминала. Созданный вами с помощью qlogin процесс регистрации будет использовать указанный вами терминал в качестве своего терминала для ввода и вывода, но его управляющим терминалом будет терминал, в котором вы набрали "qlogin".

Причина этого различия в следующем: если управляющий процесс Linux'а открывает терминал для ввода, но еще не имеет управляющего терминала, то этот терминал и становится его управляющим. Но если управляющий терминал уже существует, то он сохраняется. Init же не имеет управляющего терминала, поэтому его не создает и наследующий процесс qlogin. Однако оболочки login'а имеют управляющие терминалы, следовательно их имеют и наследующие процессы, создаваемые вами вводом команд (таких как qlogin) в командной строке.

Различие можно увидеть, нажав Control-C: он ничего не делает. Ввод Control-C на стадартном входном устройстве кроме вставки символа Control-C во входной поток смысла не имеет. Но на управляющем терминале Control-C передает переднеплановым (foreground, в противоположность фоновым, background) процессам, связанным с этим терминалом, сигнал SIGINT, который имеет знакомый эффект прерывания программы.

То есть, если вы регистрируете себя на /dev/tty5, набрав "qlogin /dev/tty5 ..." на /dev/tty1, то Control-C на /dev/tty5 работать не будет. Поместите эту же команду "qlogin /dev/tty5 ..." в /etc/inittab, и Control-C на /dev/tty5 будет работать прекрасно.

Замечание: будучи педантом, я должен признать, что говоря о Control-C, я предполагаю, что свойства терминала TTY установлены таким образом, что Control-C является "символом прерывания". Вы можете использовать stty, чтобы установить какой-нибудь другой символ прерывания или вообще никакого.



Содержание раздела