Странный процесс зомби реагирует на сигналы?

Вы можете сделать это с помощью awk следующим образом:

awk -F\| 'BEGIN {OFS="|"};{$12=substr($12,1,5)};1' 

-F устанавливает разделитель полей на | , то перед началом обработки текста мы используем блок BEGIN , чтобы также установить разделитель выходных полей ( OFS ) на | . Затем мы заменяем значение в 12-м поле первыми 5 символами этого поля для каждой записи.

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

Спасибо Stéphane Chazelas за исправление некоторых проблем, которые у меня были, и за то, что он сделал его более подходящим для POSIX. В частности, для исправления моего начального индекса от 0 до 1. Документация GNU включает следующую строку, которая позволила мне избавиться от ошибки:

Если start меньше единицы, substr () рассматривает ее как единицу.

, но 1 - это индекс первого символа, поэтому его следует использовать, особенно для людей, не использующих gawk . Например, с mawk :

$ mawk 'BEGIN{print substr("1234567", 0, 5)}'
1234
$ mawk 'BEGIN{print substr("1234567", 1, 5)}'
12345
1
20.11.2018, 15:32
3 ответа

Я нашел проблему и решение своей проблемы, просмотрев dmesg :Я обнаружил, что была «Внутренняя ошибка :Упс :817 [ #1] ARM», вызванная пользовательским ядром функция в файле proc. Файл proc был прочитан основным потоком процесса, ставшего зомби, и иногда эта операция приводила к гибели основного потока... Это в точности похоже на ответ @muru. Я исправил функцию, и теперь процесс больше не умирает. Все равно спасибо всем.

0
27.01.2020, 23:31

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

Итак, если, как вы говорите, ни один из B, C и D не мертв, а A завершает выполнение, он станет зомби до тех пор, пока все B, C и D также не закончат выполнение.

Это нормальное поведение.

Так что это выглядит как ошибка в A. :Он не должен умирать, пока его потомки живы, потому что он должен следить за потомками. Исправьте ошибку в A и не беспокойтесь о том, что она превратится в зомби.

1
27.01.2020, 23:31

Если вы используете pthread_exit()в функции main(), этот пост SO предполагает, что основной поток может войти в состояние зомби, но другие потоки продолжают работать. Поскольку вызов pthread_exit()в main()совершенно законен, я полагаю, что это нормальное положение дел, и эта конкретная нежить безвредна. Вы можете игнорировать его или ждать других потоков в main()вместо использования там pthread_exit().

1
27.01.2020, 23:31

Теги

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