grep не может найти строку

"Я понимаю, что когда процесс получает сигнал SIGINT, он распространяет его на все дочерние процессы"

Откуда вы взяли эту неверную идею?

$ perl -E '$SIG{INT}=sub { say "ouch $$" }; if (fork()) { say "parent $$"; sleep 3; kill 2, $$ } else { say "child $$"; sleep 99 }'
parent 25831
child 25832
ouch 25831
$

Если бы было распространение, как утверждается, можно было бы ожидать "ой" от дочернего процесса.

В действительности:

"Всякий раз, когда мы набираем на терминале клавишу прерывания (часто DELETE или Control-C) или клавишу выхода (часто Control-backlash), это вызывает либо сигнал прерывания или сигнал выхода посылается всем процессам в группе процессов переднего плана" -- В. Ричард Стивенс. "Advanced Программирование в среде UNIX®". Addison-Wesley. 1993. p.246.

Это можно наблюдать следующим образом:

$ perl -E '$SIG{INT}=sub { say "ouch $$" }; fork(); sleep 99'
^Couch 25971
ouch 25972
$

Поскольку все процессы группы процессов переднего плана будут получать SIGINT от Control+C, вам нужно будет спроектировать все процессы так, чтобы правильно обрабатывать или игнорировать этот сигнал, в зависимости от ситуации, или, возможно, чтобы подпроцессы стали новой группой процессов переднего плана, чтобы родитель (например, shell) не видел сигнала, поскольку он больше не находится в группе процессов переднего плана.

1
11.05.2018, 19:15
1 ответ

No proporcionó una entrada de muestra, pero en su primer ejemplo sus comillas dobles permiten que su shell expanda la variable disallowedBlockNamesantes de que sea utilizada por grep. Supongo que esta es una variable establecida en su código php y no existe en su caparazón y, por lo tanto, se está expandiendo a nada. Entonces, lo que realmente estás enviando a grep es:

grep -r "protected  = array('install/end');" app/

En el segundo ejemplo, las comillas simples evitan que el shell expanda la variable.

3
27.01.2020, 23:23

Теги

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