- Состояние процесса windows
- proc_get_status
- Описание
- Список параметров
- Возвращаемые значения
- Смотрите также
- User Contributed Notes 9 notes
- PHP process manager
- Как получить список процессов PHP, работающих на сервере с PHP
- 2 ответа
- mysql_list_processes — Возвращает список процессов MySQL
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
Состояние процесса windows
Состояние процесса
Можно ли как-то определить состояние задач- Работает или не отвечает? как в диспетчере задач?
Отслеживание состояние процесса. Исключение
Чего я пытаюсь добиться, я хочу чтобы при запуске программы она искала процесс с заданным именем.
Состояние процесса по его pid
Подскажите функцию, которая возвращает состояние процесса.(выполняется, завершился и тд) Запускаю.
Как проверит состояние процесса C#
Как проверить состояние процесса C# Запущен он или нет. Заранее сяпиум :3 Добавлено через 7.
А можно пример, с процессом cmd?
Хотелось бы целиком увидеть скрипт.
Заранее благодарен.
Добавлено через 1 минуту
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Постоянное отслеживание состояние процесса
Как сделать так, чтобы во время выполнения программы ВСЕГДА отслеживался заданный процесс? То бишь.
Узнать состояние ранее запущенного процесса
Доброго времени суток. Помогите решить проблему? Есть программа под Win, работает как служба.
Как узнать состояние процесса по PID?
Доброго времени суток, подскажите как можно узнать запущен ли процесс или не запущен если я знаю.
Как узнать текущее состояние процесса
Здравствуйте уважаемые эксперты. Собственно вопрос стоит в названии темы, как можно узнать текущее.
proc_get_status
(PHP 5, PHP 7, PHP 8)
proc_get_status — Получить информацию о процессе, открытом proc_open()
Описание
proc_get_status() получает данные о процессе, открытом при помощи функции proc_open() .
Список параметров
Дескриптор типа resource , открытый при помощи proc_open() , который будет исследоваться.
Возвращаемые значения
Массив ( array ) с полученной информацией в случае успеха и false в случае неудачи. Получаемый массив содержит следующие элементы:
элемент | тип | описание |
---|---|---|
command | string | Строка с командой, которая была передана функции proc_open() . |
pid | int | идентификатор процесса |
running | bool | true , если процесс всё ещё запущен, false , если он был завершён. |
signaled | bool | true , если дочерний процесс был завершён неперехваченным сигналом. Всегда устанавливается в false в Windows. |
stopped | bool | true , если дочерний процесс был остановлен сигналом. Всегда устанавливается в false в Windows. |
exitcode | int | Код возврата, передаваемый процессом (имеет значение только в том случае, если running равно false ). Только первый вызов этой функции возвратит реальное значение, последующие вызовы будут возвращать -1 . |
termsig | int | Номер сигнала, который заставил дочерний процесс прекратить его выполнение (имеет значение только в том случае, если signaled равно true ). |
stopsig | int | Номер сигнала, который заставил дочерний процесс остановить его выполнение (имеет значение только в том случае, если stopped равно true ). |
Смотрите также
- proc_open() — Выполнить команду и открыть указатель на файл для ввода/вывода
User Contributed Notes 9 notes
On Unix/Linux, if you change the command line you pass to proc_open() just slightly then proc_get_status() will give you the actual process-id (pid) of your child.
Suppose you wish to run the external command /usr/bin/compress to create a BSD foo.Z file. Rather than proc_open(«/usr/bin/compress /tmp/foo». ) you may invoke proc_open(«exec /usr/bin/compress /tmp/foo». ) and then proc_get_status()[‘pid’] will be the actual pid of /usr/bin/compress.
Why? Because the way proc_open() actually works on Unix/Linux is by starting «/bin/sh -c usercmd userargs. «, e.g., «/bin/sh -c /usr/bin/compress /tmp/foo».[Note 1] That means normally your command is the child of the shell, so the pid you retrieve with proc_get_status() is the pid of the shell (PHP’s child), and you have to fumble around trying to find the pid of your command (PHP’s grandchild). But if you put «exec» in front of your command, you tell the shell to *replace itself* with your command without starting another process (technically, to exec your command without forking first). That means your command will inherit the pid of the shell, which is the pid that proc_get_status() returns.
So if you would like the actual pid of the process running your command, just prepend «exec » to your proc_open() command argument then retrieve the pid using proc_get_status().
This also makes proc_terminate() and proc_close() work more like you might prefer, since they will affect the actual process running your command (which will be a child process rather than a grandchild process).
[Note 1] My guess is that the PHP developers want the shell to expand wildcards in path/filenames.
For clarification, the «exitcode» is only valid the FIRST TIME IT IS CALLED after the process exits.
If you have a method that polls a spawned process for its status, you *MUST* have that same method capture the exitcode: if the method is called a second time (after realizing the pid is dead) and it hasn’t cached that exitcode, it will receive the -1 mentioned.
It is worth noting that proc_get_status will continue to indicate the process that you spawned is running (because it is!) until that process has been able to write everything it wants to write to the STDOUT and STDERR streams.
PHP seems to use a buffer for this and so the spawned process can can get it’s write calls to return immediately.
However, once this buffer is full the write call will block until you read out some of the information from the stream/pipe.
This can manifest itself in many ways but generally the called process will still be running, but just not doing anything as it is blocking on being able to write more to STDERR or STDOUT — whichever stream buffer is full.
To work around this you should include in your loop of checking proc_get_status’ running element a «stream_get_contents» on the relevant pipes.
I generally use stream_set_blocking($pipies[2], 0) kind of calls to make sure that the stream_get_contents call will not block if there is no data in the stream.
This one had me stumped for a while, so hopefully it helps someone!
The following function takes an array of shell commands and executes them. It is able to execute up to $nb_max_process at the same time. As soon as one process is terminated, another one is executed. Quite useful if you want to batch process commands on a multi-processor or multi-core environment.
The example below tries to convert to PNG a list of SVG files submitted on the command line (using Inkscape).
(it’s quick and dirty but works very well for me)
#!/usr/bin/php
function pool_execute ( $commandes , $nb_max_process ) <
$pool =array();
for( $i = 0 ; $i $nb_max_process ; $i ++) <
$pool [ $i ]= FALSE ;
>
while( count ( $commandes )> 0 ) <
$commande = array_shift ( $commandes );
$commande_lancee = FALSE ;
while( $commande_lancee == FALSE ) <
usleep ( 50000 );
for( $i = 0 ; $i $nb_max_process and $commande_lancee == FALSE ; $i ++) <
if( $pool [ $i ]=== FALSE ) <
$pool [ $i ]= proc_open ( $commande ,array(), $foo );
$commande_lancee = TRUE ;
> else <
$etat = proc_get_status ( $pool [ $i ]);
if( $etat [ ‘running’ ]== FALSE ) <
proc_close ( $pool [ $i ]);
$pool [ $i ]= proc_open ( $commande ,array(), $foo );
$commande_lancee = TRUE ;
>
>
>
>
>
>
$fichiers = $argv ;
array_shift ( $fichiers );
$commandes =array();
foreach( $fichiers as $fichier ) <
$entree = $fichier ;
$sortie = basename ( $fichier , ‘.svg’ ). «.png» ;
$commandes []= ‘inkscape —file=’ . escapeshellarg ( $entree ). ‘ —export-area-canvas —export-png=’ . escapeshellarg ( $sortie );
>
PHP process manager
На Хабре было много статей, о том как писать демоны на PHP и другие fork-нутые вещи. Хочу поделится с вами своими наработками на схожую, но все-таки несколько другую тему — управление несколькими PHP процессами.
Для начала небольшой словарь терминов, используемых в статье.
- Job (работа) — задача, выполняемая в отдельном процессе. Наберите в консоли «php test.php» — вот вам job.
- Job Manager или Process Manager — процесс, управляющий задачами. Собирает и обрабатывает их вывод и может посылать сообщения на ввод.
Цель поставленной задачи в том, чтобы иметь возможность влиять на уже запущенные и работающие процессы и получать информацию о ходе их выполнения.
Для запуска новых процессов я использую функцию proc_open, которая позволяет переопределять дескрипторы ввода/вывода для нового процесса. Для управления отдельным процессом был разработан класс Job. Работа характеризуется названием и выполняемой командой.
Для управления работами создан класс Job_Manager, который по сути является ключевым во всей схеме.
Управлять некоторыми абстрактными задачами мы уже научились, осталось реализовать класс для самих исполняемых процессов.
В качестве примера использования менеджера процессов реализуем «спящий» процесс — скрипт, который будет спать и отписываться по этому поводу в STDOUT
Используемые в реализации неблокирующие дескрипторы и функция stream_select позволяют избегать проблемы, типичной для разного рода демонов — высокая загрузка ЦПУ в холостом цикле. Предложенный метод лишен этого недостатка, все работает гладко и спокойно.
Как получить список процессов PHP, работающих на сервере с PHP
У меня есть cronjob, который запускает файл PHP, который запускает DAEMON, написанный на PHP, но я хочу запускать DAEMON только в том случае, если другие экземпляры не запущены, как я могу получить список процессов PHP, выполняющихся для того, чтобы найдите, работает ли мой DAEMON. Я думал о каком-то exec, который будет генерировать список, который я могу сохранить в массиве. Есть идеи? спасибо
2 ответа
Чтобы получить список процессов PHP, посмотрите этот вопрос:
Другой вариант заключается в том, что вы можете получить блокировку файла и затем проверить ее перед запуском: например:
В основном в приведенном выше примере вы сначала проверяете, заблокирован ли файл или нет, и если он не заблокирован (значит, процесс завершен), вы можете получить блокировку и начать свой код.
Вот мое полное решение взять под контроль cron с помощью php-скрипта, который включает в себя mysql db для конфигурации и ведения журнала. Вы должны найти ответы на свои вопросы в исходном коде.
Идея состоит в том, чтобы иметь конфигурацию в базе данных, где я хранил шаблоны для preg_match в определенном формате ( дата (‘d.m.Y.N.W H: i: s’) ). Этот сценарий планируется запускать каждую минуту.
Затем я всегда выбираю все шаблоны и сопоставляю их с результатами функции даты.
Если совпадение найдено, я выполню команду, сохраненную для этого задания — поместу ее в фоновом режиме и сохраню ее pid в базе данных — отдельной таблице, где хранятся все выходные данные из заданий.
В конце я проверяю в базе данных задания, помеченные как выполняющиеся, и проверяю, находятся ли они в списке процессов.
mysql_list_processes — Возвращает список процессов MySQL
(PHP 4 >= 4.3.0, PHP 5)
mysql_list_processes — Возвращает список процессов MySQL
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
Описание
Возвращает список текущих процессов на сервере MySQL.
Список параметров
Соединение MySQL. Если идентификатор соединения не был указан, используется последнее соединение, открытое mysql_connect() . Если такое соединение не было найдено, функция попытается создать таковое, как если бы mysql_connect() была вызвана без параметров. Если соединение не было найдено и не смогло быть создано, генерируется ошибка уровня E_WARNING .
Возвращаемые значения
Дескриптор результата ( resource ) в случае успеха или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysql_list_processes()
= mysql_connect ( ‘localhost’ , ‘mysql_user’ , ‘mysql_password’ );
$result = mysql_list_processes ( $link );
while ( $row = mysql_fetch_assoc ( $result )) <
printf ( «%s %s %s %s %s\n» , $row [ «Id» ], $row [ «Host» ], $row [ «db» ],
$row [ «Command» ], $row [ «Time» ]);
>
mysql_free_result ( $result );
?>
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
- mysql_thread_id() — Возвращает идентификатор текущего потока
- mysql_stat() — Возвращает текущий статус сервера