![]() | |
| |||||||
| Home | Register | Blogs | FAQ | Members List | Calendar | Downloads | Arcade | Mark Forums Read |
| Web Development Java/PHP/Perl/ASP and more |
![]() |
| | LinkBack | Thread Tools | Display Modes |
| | #1 |
| панаехавший | pipe() Люди, такая вот проблема. Нужно раннуть одну прогу - из под пхп, но при этом нужно вырубить ее если она станет работать дольше определенного периуда времени. Я пробовал изпользовать че то виде: PHP Code: PHP Code: Хэлп.
__________________ Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին: My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը |
| | |
| | #2 |
| ¡no pasaran! | разгадка кроется в самой команде 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() значения.
__________________ [ que fors aus ne le sot riens nee ] |
| | |
| | #3 |
| панаехавший | Ндаа... А на виндвозе это нельзя как то сделать? Или, можно ли достать pid запущенного процесса, а потом послать ему term?
__________________ Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին: My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը |
| | |
| | #4 |
| ¡no pasaran! | т.к. нет специальных пометок в документации, то под Винды работает так же. А послать term можно, но проще это написать как небольшое предисловие к запускаемой программе [ fork() ], а не в php.
__________________ [ que fors aus ne le sot riens nee ] |
| | |
| | #5 |
| панаехавший | Проблема в том что прогу пишу не я (типа нечего мне больше делать чем кидать эту дурь в бесконечный цикл). А компилировать каждый раз исходный код все таки затруднительно. А как можно послать term?
__________________ Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին: My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը |
| | |
| | #6 |
| ¡no pasaran! | нее.. я не имею в виду именну ту программу, которую ты хочешь запустить. Нужно написать на С небольшую прогу, которая должна: 1. fork() -ает и запускает ту программу, которую нужно вырубить по тайм-ауту. 2. Спит определенное время. После пробуждения проверят состояние запущенной программы, и если она еще не завершена, убивает ее. Компилируется эта штука 1 раз а программу и тайм аут можно передажать через argv. Сам осилишь или написать ее код?
__________________ [ que fors aus ne le sot riens nee ] |
| | |
| | #7 |
| панаехавший | Честно говоря не очень разбираюсь - плиз дай короткий шаблон на C. ![]()
__________________ Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին: My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը Last edited by Obelix : Nov 9, 2003 at 12:27. |
| | |
| | #8 |
| killa-hilla | 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);
}
}
__________________ Live Free or die... |
| | |
| | #9 |
| панаехавший | Ок, понятно, спасибо. ![]()
__________________ Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին: My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը |
| | |
![]() |
| Thread Tools | |
| Display Modes | |
| |