Обратите внимание, что «неубиваемые» процессы bash запускаются от имени пользователяp
:
user 6174 0.0 0.0 13016 28 pts/19 Ss+ Feb13 0:04 /bin/bash
p 10964 0.0 0.0 11700 28 pts/2 Ss+ Feb11 0:01 bash
p 11126 0.0 0.0 7952 560 pts/3 Ss+ Feb11 0:00 bash
user 18195 0.0 0.0 17320 344 pts/9 Ss+ Apr22 0:29 /bin/bash
Вы работаете как пользователь user
, поэтому вы не можете просто убить какие-либо процессы пользователя p
.
Если у вас есть доступ sudo
, вы можете выполнять команды уничтожения либо как root, либо как пользователь p
. Для вещей, которые могут быть старыми пользовательскими сеансами, использование kill -HUP
было бы лучше, чем просто kill
, поскольку это позволяет таким вещам, как редакторы, сохранять резервную копию любой несохраненной работы перед выходом. Кроме того, интерактивные процессы оболочки (, т. е. старые сеансы ), могут быть невосприимчивы к обычным kill
, но kill -HUP
для них отлично работает.
Выполнить команду kill от имени пользователяp
:
user$ sudo -u p kill -HUP 10964 11126
или с помощью root power:
user$ sudo kill -HUP 10964 11126
Для процессов, запущенных от имени пользователя p
, команда kill, отданная от имени пользователя p
, будет столь же сильной, как и команда kill, отданная пользователем root :даже обычные пользователи имеют полную власть над жизнью и смертью любого процесса они владеют собой.
Используя sed
и предполагая, что вам не нужен первый пробел после:
:
sed '/^comment/!d; s/[^:]*:[[:blank:]]//' file
или, только с одним оператором редактирования,
sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file
Думаю, в Python это выглядело бы так
^comment[[:blank:]]*:[[:blank:]](.*)
или, возможно,
^comment\s*:\s(.*)
если Python не понимает классы символов POSIX.
Бит [[:blank:]]*
соответствует любому набору пробелов или символов табуляции. Шаблон \s
больше похож на класс символов POSIX [[:space:]]
, который соответствует более широкому массиву символов пробела -, включая символы новой строки.
Проблема с вашим выражением заключается в том, что вы сопоставляете весь документ в строке, а выражение в Python (, которое, я полагаю, вы используете ), \s
соответствует встроенным символам новой строки в строке (строка, представляющая собой весь документ ). Таким образом, выражение захватывает все, начиная с первого не -пробела (новых строк, включая ), не -*
, не -:
(, оба :
и *
являются буквальными в пределах [...]
), символ, который p
в probe
на следующей строке до следующей новой строки.
Вы также можете сделать это следующим образом:
'^comment[\s*:]*(\S+| +)$'
Изменено .*
на \S+
, так что мы либо сопоставляем любые непробельные символы, либо пробелы (, описанные ниже ), за которыми следует конец строки, или пробелы, за которыми следует конец строки.
| +)
также должно соответствовать любому количеству пробелов (одному или нескольким )в наборе.
Ожидается, что за набором последует конец строки, чтобы зафиксировать этот сценарий, который вы испытываете
Вот скриншот, иллюстрирующий регулярное выражение, соответствующее условиям: