Fatal
написал 10 ноября 2004 года в 12:12 (1078 просмотров)
Ведет себя
как мужчина; открыл 123 темы в форуме, оставил 484 комментария на сайте.
Как в Unix определить запущена ли программа или нет? Это нужно, что бы не запускать повторно ту же программу.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
man pidof
Я думаю, что pidof для Linux, поту что у меня в манах такого нет. (FreeBSD)
ps aux | grep ?
Я сделал так…
Запускаю прогу считываю ее пид и …сохраняю наприме в
/tmp/proga.pid
А при запуске прога мотрит есть ли такой файлик …ну ты меня понял
У меня так организовано
[steck(~)]$ my_clock
my_clock: Arleady running at pid 647 ?
Kill process or remove /home/steck/.my_clock.pid
Если прогу кильнуть то перед этим она удаляет *.pid
Потом можно считывать из файла pid и проверять та это прога или нет
(Вдруг этому файлу пару лет уже ;o) )
а проверять ..
Смотреть в /proc искат там диру с названием нашего пида… и копать там
P.S Потерял свое красноречие но надебсь понятно описал ;o)
Я так понимаю ты знаешь pid процесса, если да, то скорее всего если он не запущен, то функция которая посылает сигнал вернёт значение ошибки.
сам я сигналами ни когда не пользовался, но помоему системный вызов kill
может посылать любые сигналы, а не только TERM и т. д.
Блин мысль выразил, а что делать забыл сказать:
пошли ему какой-нибудь сигнал!
взять из стартап скриптов из RH файлик functions и посмотреть, как это там сделано…
Спасибо, и извините, но я имел в виду что-нибудь на Си — это моя вина, я не написал.
Если с выкрутасами, то я тоже так могу, я просто думал, может кто знает какую-нибудь простенькую функцию. А то так бывает пишешь, пишешь, а потом бац и выясняется, что такая функция уже есть.
И желательно с /proc не делать, потому что это делает прогу зависимой от конкретного Unix, а это не желательно.
С сигналами пробовал?
С сигналами не получиться, что бы послать сигнал надо знать pid процесса. Здесь надо, что-то попроще.
а как именно запускается программа?
Из командной строки, или другой прогой через fork + exec
А что ты о нём знаешь?
тогда батенька есть вариант чтоб ета программа устанавливала системную переменную каккую-нибудь
а для форканья смотри man fork, ибо «fork» возвращает свой PID породившему процессу больше не скажу т.к. «C» незнаю вообще :)
ещё вариант при запуске создать фаил «var/run/имя_программы.pid» а при выключении его удалять в файле хранить собственно PID и проверять на соответствие
hint: читать про Interprocess Communication (IPC)
как оно делается, зачем оно делается и почему оно делается
проблемы, которые при этом возникают и пути их решения.
самый прсотой метод в данном случае — создание named sharing object. пусть даже это будет файлом.
в общем случае — это именно «именованый объект», который создаётся (и доступ к которому блокируется) процессом, в который он записывает нужную информацию…
Да IPC объекты я знаю прекрасно, да вот только если программа было убита сигналом KILL, который нельзя поймать, или получила сбой, то IPC объект некому будет освободить и если запустить программу еще раз, она будет думать, что ее копия уже активна и не запуститься.
блокировка по удитию процесса со всех файлов снимается
как и происхождит закрытие всех файловых бескрипторов