Завершение вкладки ksh не работает, если Я набрал ровно 4 символа, прежде чем нажимать вкладку

Вы не можете принудительно убить код ядра, если он не хочет, чтобы его убивали. Код ядра не может быть уничтожен в произвольное время, потому что он может находиться в процессе доступа к периферийному устройству, он может удерживать блокировку, он может выделять некоторые ресурсы, которые необходимо освободить ... Код пользовательского пространства может быть уничтожен, потому что ядро ​​содержит все эти ресурсы от имени процесса и очищает их, если процесс умирает. Но внутри ядра каждый фрагмент кода должен обрабатывать свою собственную очистку.

Обычно код ядра проверяет наличие сигналов и полностью прекращает свои действия, если получает сигнал. Но вы столкнулись с ошибкой ядра. В этом случае вам не повезло. Если код застрял, значит он застрял. Поскольку застрявший код выполняется в контексте системного вызова процесса, этот системный вызов никогда не вернется (если ситуация внутри ядра каким-либо образом не исправится сама собой). Процесс находится в середине системного вызова, поэтому его нельзя убить. Сигнал KILL помещается в очередь, и если системный вызов когда-либо вернется, процесс немедленно прекратит работу, но если системный вызов не вернется, процесс зависнет.

2
18.05.2017, 13:25
1 ответ

Я могу подтвердить, что эта ошибка существует и на других Unices, работающих ksh93.

Глядя на то, как текущая разрабатываемая версия оболочки ksh93справляется с этим, эта конкретная ошибка кажется исправленной.

Разрабатываемая версия доступна на GitHub(в ветке master), а версия, которую я пробовал, сообщает строку версии Version A 93v-1400-g3d8a9fe4.

Насколько мне известно, в настоящее время дата следующего релиза не установлена, но, судя по частым коммитам в кодовую базу, идет разработка.

0
27.01.2020, 22:40

Теги

Похожие вопросы