Вы можете продолжать свой подход, если Вам так нравится.
Конечно, вы можете выполнять несколько команд для каждого совпадения и сопоставлять разные строки с различной последовательностью команд (, а также можете совместно использовать некоторые команды для разных типов строк, в то же время запуская более конкретные команды ).
Экс:
tail -f /mnt/zandrologs/* | awk '
/GRRFIELD/{ system("echo \"test\""); system("echo \"testG\""); }
/FRRFIELD/{ system("echo \"test2\""); system("echo \"testF\""); }
/FIELD/{ system("echo \"shared command for all lines containing FIELD\"");}'
Вы также можете опустить символы новой строки и заменить их пробелами, если хотите. Также вы можете выполнить более сложное сопоставление -, и если вы когда-либо сопоставляете только $0 (всю строку ), как в вашем примере, я бы рекомендовал использовать awk в фиксированных полях с режимом, чтобы избежать накладных расходов на разделение строки в поля.
Не напрямую. Он мог бы, но ему нужно было бы идентифицировать канал, к которому он подключен, а затем искать все остальные pid для одного, подключенного к этому.
Предположим, что receiver
имеет pid 1730. Он мог бы просмотреть/proc/self/fd/0
(или, проще говоря,/proc/self/fd/0
)и увидеть, что он отображается как символическая ссылка на pipe:[43270]
. /proc/1730/fdinfo/0
. Затем он может обнаружить, что /proc/1729/fd/1
отображается как символическая ссылка на pipe:[43270]
, а на /proc/1729/fdinfo/1
он имеет флаги 01
. Таким образом, он нашел процесс, удерживающий другой конец трубы.
Обратите внимание:
any-process
принадлежит другому пользователю, receiver
не сможет просматривать свои файловые дескрипторы Если вы хотите, чтобы два процесса взаимодействовали аутентифицированным способом, вам следует использовать сокет unix. Через них можно с помощью опции SO_PASSCRED
использовать вспомогательное сообщение типа SCM_CREDENTIALS
с pid, uid и gid отправителя. Учетные данные, которые указывает отправитель, проверяются ядром, чтобы гарантировать, что они не могут лгать (, если у него нет соответствующих возможностей, корневой процесс / CAP _SYS _ADMIN мог бы указать идентификатор процесса, отличный от его собственного ).
Простой способ может быть достигнут путем перенаправления исполняемого процесса на файловый дескриптор 3, вот пример команды sleep , которая передается в команду ps :
( sleep 100 & echo $!>&3 ) 3>pid | ps -p "$(<pid)"
Вы можете проверить процесс выполнения команды sleep:
ps -p $(<pid)