Как контролировать или уничтожить процесс, который был запущен кроном?

Главная причина позволить доступ для записи без доступа для чтения состоит в том, что он упрощает управление полномочиями, и в ядре и в пользовательских программах. Существует два полномочий, один для чтения и один для записи, и ими управляют независимо. Это не ошибка, так как зарегистрированное поведение совпадает с фактическим поведением и нет никакого серьезного основания потребовать другого поведения.

Наличие полномочий записи без полномочий чтения не имеет большого смысла для регулярных файлов. Это действительно имеет смысл для различных специальных файлов.

  • Некоторые системы позволяют файлы только добавления. Это полезно для файлов журнала, например. Может иметь смысл позволять многим пользователям создавать записи в журнале, но не позволять им стирать или перезаписывать существующие записи (следовательно: запишите разрешение, но атрибут только добавления), ни позволить им читать записи других (следовательно: никакое разрешение чтения).
  • Программе можно позволить записать в именованный канал, не будучи позволенным читать из него.
  • Некоторые устройства только для записи. Например, устройство звукового вывода, подключенное к громкоговорителю, но никакому микрофону, должно иметь разрешение записи, но никакое разрешение чтения.
  • Существуют различные специальные файловые системы, где чтение или запись в файл имеют непосредственный эффект вместо того, чтобы получить или добавить данные к устройству хранения данных. Например, в соответствии с Linux, существуют различные файлы под /proc и /sys это позволяет программам пространства пользователя отправлять команды в ядро путем записи в конкретный файл. Если та команда не обеспечивает обратной связи, специальный файл сделан только для записи.
4
11.08.2011, 00:16
3 ответа

Можно уничтожить процессы по имени. Например, на Linux, *BSD и Солярис, pkill myprogram уничтожает все процессы, имя которых содержит myprogram (используйте pkill '^myprogram$' для точного совпадения). При выполнении его как некорневой пользователь, только что процессы пользователя будут уничтожены, и существуют дальнейшие опции управлять соответствием (см. руководство по системе для деталей).

Если Вы хотите конкретно быть нацеленными на процессы, запущенные планировщиком, и Вы уничтожаете процессы вручную, можно работать ps f (Только Linux) или pstree (Только Linux) или ptree отобразить процессы в дереве и видеть, какие процессы были запущены кроном.

Если Вы хотите смочь уничтожить эти процессы автоматически в самодельном методе, заставьте их сохранить свой идентификатор процесса в файле. Этот вид файла называют pidfile, когда он используется, чтобы только иметь единственный экземпляр выполнения процесса (который может или не может быть чем-то, что Вы хотите). Если Вы хотите несколько экземпляров, храните PIDs в отдельных файлах в общем каталоге; вот отрывок оболочки, который делает это:

pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"

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

2
27.01.2020, 21:00

Я предложил бы вытолкать их PID ($$) в файл после порождения их. Можно затем использовать это для уничтожения процесса.

0
27.01.2020, 21:00

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

0
27.01.2020, 21:00

Теги

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