Чтобы включить все записи "Dev_[digits]":
awk 'BEGIN {RS=" "} /Dev_[0-9]+/ {print}' inputfile
Или, если вы хотите включить только эти записи "Dev":
awk 'BEGIN {RS=" "} /Dev_(795|796|797)/ {print}' inputfile
Если сервер работает от имени выделенного пользователя, вы можете сохранить копию /bin/kill
с setuid для этого пользователя. Это работает, только если пользователь не используется ни для чего другого, потому что двоичный файл setuid kill
позволяет послать сигнал любому процессу, запущенному от имени этого пользователя. Обертка setuid, которая проверяет PID перед убийством, на самом деле невыполнима: нет способа исследовать запущенные программы без условий гонки.
Другой способ решения этой проблемы заключается в том, чтобы иметь программу мониторинга, которая работает под тем же пользователем, что и сервер, и готова убить сервер, с условием запуска, которое не привязано к учетной записи пользователя. Программа мониторинга должна быть родителем сервера, чтобы иметь возможность надежно убить его без риска возникновения состояния гонки. Триггером может быть что-то вроде записи в трубу. Доказательство концепции:
#!/bin/sh
SimpleHTTPServer &
server_pid=$!
read </var/lib/myserver/kill
kill "$server_pid"
Чтобы настроить это:
mkdir /var/run/myserver
mkfifo -m 660 /var/run/myserver/kill
chown server-user /var/run/myserver/kill
chgrp server-killers /var/run/myserver/kill
Чтобы убить сервер, любой пользователь в группе server-killers
может выполнить echo >/var/run/myserver/kill
.