![]() |
![]() | #1 |
панаехавший Join Date: 06 2003 Location: форпост Age: 33
Posts: 4,007
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Люди, такая вот проблема. Нужно раннуть одну прогу - из под пхп, но при этом нужно вырубить ее если она станет работать дольше определенного периуда времени. Я пробовал изпользовать че то виде: PHP Code: PHP Code: Хэлп. |
![]() |
![]() | #2 |
¡no pasaran! Join Date: 03 2002 Location: localhost Age: 39
Posts: 540
Downloads: 0 Uploads: 0
Reputation: 13 | 4 | ![]()
разгадка кроется в самой команде plose(), которая унаследована из UNIX среды: ~$ man pclose ...... NAME popen, pclose − process I/O ....... The pclose function waits for the associated process to terminate and returns the exit status of the command as returned by wait4. Так как php использует эту самую функцию, то твой скрипт блокируется на pclose() (либо при выходе, если ты вообще не используешь ее явно в скрипте). Вероятным решением наверняка должно быть создание еще одного процесса из запущенной программы, который по тайм-ауту "убьет" своего родителя, после чего ты сможешь узнать о этом из возвращаемого разблокированным pclose() значения. |
![]() |
![]() | #4 |
¡no pasaran! Join Date: 03 2002 Location: localhost Age: 39
Posts: 540
Downloads: 0 Uploads: 0
Reputation: 13 | 4 | ![]()
т.к. нет специальных пометок в документации, то под Винды работает так же. А послать term можно, но проще это написать как небольшое предисловие к запускаемой программе [ fork() ], а не в php. |
![]() |
![]() | #5 |
панаехавший Join Date: 06 2003 Location: форпост Age: 33
Posts: 4,007
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Проблема в том что прогу пишу не я (типа нечего мне больше делать чем кидать эту дурь в бесконечный цикл). А компилировать каждый раз исходный код все таки затруднительно. А как можно послать term? |
![]() |
![]() | #6 |
¡no pasaran! Join Date: 03 2002 Location: localhost Age: 39
Posts: 540
Downloads: 0 Uploads: 0
Reputation: 13 | 4 | ![]()
нее.. я не имею в виду именну ту программу, которую ты хочешь запустить. Нужно написать на С небольшую прогу, которая должна: 1. fork() -ает и запускает ту программу, которую нужно вырубить по тайм-ауту. 2. Спит определенное время. После пробуждения проверят состояние запущенной программы, и если она еще не завершена, убивает ее. Компилируется эта штука 1 раз а программу и тайм аут можно передажать через argv. Сам осилишь или написать ее код? |
![]() |
![]() | #8 |
killa-hilla Join Date: 03 2002 Location: Yaktown
Posts: 382
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]() Code: #include <stdio.h> #include <stdlib.h> #include <signal.h> int main(int argc,char* argv[]){ pid_t doch; doch = fork(); if ( doch != 0) system(argv[1]); else { sleep(3); kill(doch,SIGTERM); } } |
![]() |