The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"определить запущен ли процесс"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"определить запущен ли процесс"
Сообщение от apels1n emailИскать по авторуВ закладки(??) on 28-Ноя-04, 16:09  (MSK)
Имеется pid процесса, название программы с этим пидом. Надо узнать программно работает ли программа еще или нет, запущен процесс или нет. В результате хочется чего-то вроде waitpid, только чтоб не только для дочерних процессов работал, а для любых.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "определить запущен ли процесс"
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 29-Ноя-04, 12:25  (MSK)
>Имеется pid процесса, название программы с этим пидом. Надо узнать программно работает
>ли программа еще или нет, запущен процесс или нет. В результате
>хочется чего-то вроде waitpid, только чтоб не только для дочерних процессов
>работал, а для любых.


#include <sys/types.h>
#include <signal.h>
#include <errno.h>
#include <string.h>

if (kill(pid_val, 0)!=0)
{
if (errno==ESRCH) printf("Нету процесса с PID=%d\n", pid_val);
else ("Error in kill() : %s\n", strerror(errno));
}
else
{
printf("Процесс с PID=%d существует\n", pid_val);
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "определить запущен ли процесс"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 30-Ноя-04, 22:39  (MSK)
Способ классический. Правда, как и следовало ожидать,
без возможности дождаться завершения процесса.

В своё время я долго пыжился, пытаясь изготовить оный
"waitpid() для недочернего процесса". Увы, приближения
получаются в лучшем случае посредственные. Типа приведённого
выше кода цикле и совместно с nanosleep(). В итоге пришёл
к выводу, что сделать 'совсем хорошо' не дают ограничения
портабельного набора системных вызовов. Хотя возможно,
что починки требуют мои /dev/handsN.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "определить запущен ли процесс"
Сообщение от klalafuda emailИскать по авторуВ закладки on 01-Дек-04, 09:31  (MSK)
>Способ классический. Правда, как и следовало ожидать,
>без возможности дождаться завершения процесса.
>
>В своё время я долго пыжился, пытаясь изготовить оный
>"waitpid() для недочернего процесса". Увы, приближения
>получаются в лучшем случае посредственные. Типа приведённого
>выше кода цикле и совместно с nanosleep(). В итоге пришёл
>к выводу, что сделать 'совсем хорошо' не дают ограничения
>портабельного набора системных вызовов. Хотя возможно,
>что починки требуют мои /dev/handsN.

в силу архитектурных особенностей, на уровне POSIX вы не получите "waitpid для любого процесса". и это логично.

если за рамками POSIX, то это уже system dependant.

например, в QNX4 микроядро может рассылать сообщение _SYSMSG_SUBTYPE_DEATH заданным процессам по завершению любого процесса в системе. фактически, полная трассировка остановки процессов. этим удобно пользоваться, когда вам нужно сделать какой-то cleanup на стороне сервера по завершению клиента, пусть даже аварийному по SIGKILL. недостаток такого подхода - чистый deadloop если процесс, подписанный на указанное сообщение зависает. тут всем хана :)

скорее всего, свои подходы есть и в Linux/BSD. не скажу про Linux, но в BSD в контексте ядра можно поставить hook на fork()/exit() -> можно нарисовать lkm под свои задачи ну и так далее. но это опять таки system dependant.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру