kill() не остановит подпроцесс, если он запущен из процесса, запущенного /etc/rc.local?

Пространство здесь используется в смысле, аналогичном математическому понятию пространства:

In mathematics, a space is a set (sometimes called a universe) with some added structure.

Пространство имен представляет собой набор имен.

0
11.11.2019, 06:25
2 ответа

Возможно, вы унаследовали игнорирование SIGQUIT от сценариев загрузки, так как fork и exec не трогают их. Сбросьте SIGQUIT в состояние по умолчанию в вашей родительской программе, чтобы попробовать это.

1
28.01.2020, 02:39

Это маловероятно из-за работы под rc.local.

Во-первых, убедитесь, что родитель действительно отправляет сигнал (здесь вам могут понадобиться строки отладки )и дочерний элемент не будет убит (запустите pgrep aplay, заставьте родителя убить, затем pgrep aplay снова ). Я также собираюсь предположить, что у вас нет SELINUX или других странностей MAC.

Процесс, не отвечающий на команду kill (), сводится к нескольким вещам :разрешениям, обработке и PID. Похоже, у вас есть родительский процесс «effectPlayer», который порождает дочерний «aplay», а effectPlayer отправляет сигнал «QUIT» дочернему процессу.

Предполагая, что вы не делаете ничего странного с setuid и друзьями, и у родителя, и у ребенка будет один и тот же владелец, так что это нормально.

Сигнал выхода можно замаскировать, но я почти уверен, что aplay этого не сделает. Так что это возможность. Вы можете изменить SIGQUIT на SIGKILL, чтобы посмотреть, изменит ли это ситуацию.

Наконец, PID. Вы уверены, что это правильный pid? Опять же, некоторые строки отладки, в которых указывается PID, который вы пытаетесь убить, и сопоставление его с командой ps, будут проверять это. Иногда вы можете использовать exec в оболочке, и вы убиваете не тот процесс.

0
28.01.2020, 02:39

Теги

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