AKB Forums

Go Back   AKB Forums > Technical sections > Languages, Compilers and Interpreters > Web Development
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Web Development Java/PHP/Perl/ASP and more

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Nov 7, 2003, 15:04   #1
панаехавший
 
Obelix's Avatar
 
Join Date: Jun 2003
Location: форпост
Posts: 4,005
Rep Power: 6
Reputation: 10
Send a message via ICQ to Obelix
pipe()

Люди, такая вот проблема. Нужно раннуть одну прогу - из под пхп, но при этом нужно вырубить ее если она станет работать дольше определенного периуда времени. Я пробовал изпользовать че то виде:
PHP Code:
$handle=popen("./a.out","r");
sleep(3);
pclose($hanlde); 
где сорц a.out-а был
PHP Code:
main() {
system("touch file");
while(
1){}

Короче не работает - зацикливается скрипт, при том индикатора (file) не получаю?
Хэлп.
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:

My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Obelix is offline   Reply With Quote Quote selected
Old Nov 7, 2003, 18:02   #2
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
разгадка кроется в самой команде 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 ]
dolphin is offline   Reply With Quote Quote selected
Old Nov 8, 2003, 12:34   #3
панаехавший
 
Obelix's Avatar
 
Join Date: Jun 2003
Location: форпост
Posts: 4,005
Rep Power: 6
Reputation: 10
Send a message via ICQ to Obelix
Ндаа... А на виндвозе это нельзя как то сделать? Или, можно ли достать pid запущенного процесса, а потом послать ему term?
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:

My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Obelix is offline   Reply With Quote Quote selected
Old Nov 8, 2003, 20:43   #4
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
т.к. нет специальных пометок в документации, то под Винды работает так же.

А послать term можно, но проще это написать как небольшое предисловие к запускаемой программе [ fork() ], а не в php.
__________________
[ que fors aus ne le sot riens nee ]
dolphin is offline   Reply With Quote Quote selected
Old Nov 9, 2003, 08:43   #5
панаехавший
 
Obelix's Avatar
 
Join Date: Jun 2003
Location: форпост
Posts: 4,005
Rep Power: 6
Reputation: 10
Send a message via ICQ to Obelix
Проблема в том что прогу пишу не я (типа нечего мне больше делать чем кидать эту дурь в бесконечный цикл). А компилировать каждый раз исходный код все таки затруднительно.

А как можно послать term?
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:

My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Obelix is offline   Reply With Quote Quote selected
Old Nov 9, 2003, 09:04   #6
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
нее.. я не имею в виду именну ту программу, которую ты хочешь запустить.

Нужно написать на С небольшую прогу, которая должна:

1. fork() -ает и запускает ту программу, которую нужно вырубить по тайм-ауту.
2. Спит определенное время. После пробуждения проверят состояние запущенной программы, и если она еще не завершена, убивает ее.

Компилируется эта штука 1 раз а программу и тайм аут можно передажать через argv.

Сам осилишь или написать ее код?
__________________
[ que fors aus ne le sot riens nee ]
dolphin is offline   Reply With Quote Quote selected
Old Nov 9, 2003, 12:01   #7
панаехавший
 
Obelix's Avatar
 
Join Date: Jun 2003
Location: форпост
Posts: 4,005
Rep Power: 6
Reputation: 10
Send a message via ICQ to Obelix
Честно говоря не очень разбираюсь - плиз дай короткий шаблон на C.
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:

My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը


Last edited by Obelix : Nov 9, 2003 at 12:27.
Obelix is offline   Reply With Quote Quote selected
Old Nov 9, 2003, 20:54   #8
killa-hilla
 
Join Date: Mar 2002
Location: Yaktown
Posts: 383
Rep Power: 7
Reputation: 10
Send a message via ICQ to Yaki
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...
Yaki is offline   Reply With Quote Quote selected
Old Nov 10, 2003, 10:25   #9
панаехавший
 
Obelix's Avatar
 
Join Date: Jun 2003
Location: форпост
Posts: 4,005
Rep Power: 6
Reputation: 10
Send a message via ICQ to Obelix
Ок, понятно, спасибо.
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:

My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Obelix is offline   Reply With Quote Quote selected
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 10:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link