[fpc-pascal] [SYSTEM] Linux <defunct> processes when execute external program SIGCHILD,fpWaitPID
TOUZEAU DAVID
david.touzeau at fr.kaspersky.com
Fri Nov 24 10:43:56 CET 2006
Many thanks but how to implement this kind of procedure SIGCHILD on
the child process.
i have only these informations about ??
http://community.freepascal.org:10000/docs-html/rtl/baseunix/sigchld.html
If i understant the process must wait until the child process send Kill ?
But how to receive the pid form the child process ?
if i understand the function could be ??:
###############################################
Execl(commandline);
fpWaitPid(??,0,WNOHANG);
###############################################
Best rgeardes
Michael Van Canneyt a écrit :
> On Tue, 21 Nov 2006, TOUZEAU DAVID wrote:
>
>
>> Dear
>>
>> my application run has a daemon
>> When the daemon load, it create a Timer function as a class(TThread).
>> This Timer thread has a loop and create an another Thread (called "SendStatus"
>> each 5 minutes)
>>
>> function that load thread :
>> ###############################################
>> procedure mTimer.Execute;
>> var
>> Pool:integer;
>> xPool:longint;
>> Myini:TIniFile;
>> thread:SendStatus;
>> begin
>>
>> while not Terminated do
>> begin
>> FConfigFilePath:='/etc/artica/artica-agent.conf';
>> LoadSettings;
>> xPool:=(Fpool*60)*1000;
>> logs('mTimer.Execute->initilize pooling for ' + IntTostr(Fpool) + '
>> milliseconds for each loop-> '+ IntTostr(Fpool) + ' minutes (from ' +
>> FConfigFilePath + ')');
>> LoadSettings;
>> logs('mTimer.Execute->initilize Thread Sendstatus');
>> thread:=SendStatus.Create; //Creating the new thread
>> thread.Resume;//Executing the new thread
>> thread.free;//Terminate the new thread
>> logs('mTimer.Execute->kill Thread Sendstatus');
>>
>> if FMustReload=1 then begin
>> Myini:=TIniFile.Create(FConfigFilePath);
>> Myini.WriteInteger('ACTIONS','ReloadSettings',1);
>> LoadSettings;
>> xPool:=(Fpool*60)*1000;
>> logs('mTimer.Execute->Reload settings -> initilize pooling for
>> ' + IntTostr(xPool) + ' milliseconds for each loop');
>> MyIni.free;
>> end;
>> Sleep(xPool);
>>
>> end;
>> end;
>> ###############################################
>>
>>
>> The "SendStatus" execute sometimes an external program writen in fpc called
>> "articacrypt".
>>
>> the function just use Execl to execute external program
>> ###############################################
>> procedure
>> SendStatus.DeCryptFile(Frompath:string;ToPath:string;PassPharse:string;SETT:KLNetSettings);
>> var passphrase,commandline,Fbin_path:string;
>> begin
>> Fbin_path:=SETT.binaries_path;
>> if Length(SETT.artica_crypt_key)=0 then begin
>> SETT.logs('SendStatus.artica_crypt_key -> null aborting..');
>> exit;
>> end;
>> commandline:=Fbin_path + '/articacrypt false ' + Frompath + ' ' +
>> ToPath + ' ' + PassPharse;
>>
>> Execl(commandline);
>>
>> SETT.logs('SendStatus.DeCryptFile -> ' + ToPath + ' was process');
>> exit;
>> end;
>> ###############################################
>>
>> this external program kill itself by calling halt() function at the end of the
>> code.
>>
>>
>>
>> My problem is that each execution of this program will add <defunc> in the
>> Linux system :
>>
>> example of ps -aux :
>>
>> root 25992 0.0 0.1 20500 2292 pts/0 Sl 19:45 0:00
>> /opt/artica/bin/articaagentd
>> root 26008 0.0 0.0 0 0 pts/0 Z 19:45 0:00 [articacrypt]
>> <defunct>
>> root 26009 0.0 0.0 0 0 pts/0 Z 19:45 0:00 [articacrypt]
>> <defunct>
>> root 26010 0.0 0.0 0 0 pts/0 Z 19:45 0:00 [articacrypt]
>> <defunct>
>> root 26011 0.0 0.0 0 0 pts/0 Z 19:45 0:00 [articacrypt]
>> <defunct>
>> root 26012 0.0 0.0 0 0 pts/0 Z 19:45 0:00 [articacrypt]
>> <defunct>
>> root 26134 0.0 0.0 0 0 pts/0 Z 19:47 0:00 [articacrypt]
>> <defunct>
>> root 26135 0.0 0.0 0 0 pts/0 Z 19:47 0:00 [articacrypt]
>> <defunct>
>> root 26136 0.0 0.0 0 0 pts/0 Z 19:47 0:00 [articacrypt]
>> <defunct>
>> root 26137 0.0 0.0 0 0 pts/0 Z 19:47 0:00 [articacrypt]
>> <defunct>
>> root 26138 0.0 0.0 0 0 pts/0 Z 19:47 0:00 [articacrypt]
>> <defunct>
>> root 26247 0.0 0.0 0 0 pts/0 Z 19:49 0:00 [articacrypt]
>> <defunct>
>> root 26248 0.0 0.0 0 0 pts/0 Z 19:49 0:00 [articacrypt]
>> <defunct>
>> root 26249 0.0 0.0 0 0 pts/0 Z 19:49 0:00 [articacrypt]
>> <defunct>
>> root 26250 0.0 0.0 0 0 pts/0 Z 19:49 0:00 [articacrypt]
>> <defunct>
>> root 26251 0.0 0.0 0 0 pts/0 Z 19:49 0:00 [articacrypt]
>> <defunct>
>> root 26388 0.0 0.0 0 0 pts/0 Z 19:51 0:00 [articacrypt]
>> <defunct>
>> root 26389 0.0 0.0 0 0 pts/0 Z 19:51 0:00 [articacrypt]
>> <defunct>
>> root 26390 0.0 0.0 0 0 pts/0 Z 19:51 0:00 [articacrypt]
>> <defunct>
>> root 26391 0.0 0.0 0 0 pts/0 Z 19:51 0:00 [articacrypt]
>> <defunct>
>> root 26392 0.0 0.0 0 0 pts/0 Z 19:51 0:00 [articacrypt]
>> <defunct>
>> root 26511 0.0 0.0 0 0 pts/0 Z 19:53 0:00 [articacrypt]
>> <defunct>
>> root 26512 0.0 0.0 0 0 pts/0 Z 19:53 0:00 [articacrypt]
>> <defunct>
>> root 26513 0.0 0.0 0 0 pts/0 Z 19:53 0:00 [articacrypt]
>> <defunct>
>> root 26514 0.0 0.0 0 0 pts/0 Z 19:53 0:00 [articacrypt]
>> <defunct>
>> root 26515 0.0 0.0 0 0 pts/0 Z 19:53 0:00 [articacrypt]
>> <defunct>
>> root 26662 0.0 0.0 0 0 pts/0 Z 19:55 0:00 [articacrypt]
>> <defunct>
>> root 26663 0.0 0.0 0 0 pts/0 Z 19:55 0:00 [articacrypt]
>> <defunct>
>> root 26664 0.0 0.0 0 0 pts/0 Z 19:55 0:00 [articacrypt]
>> <defunct>
>> root 26665 0.0 0.0 0 0 pts/0 Z 19:55 0:00 [articacrypt]
>> <defunct>
>> root 26666 0.0 0.0 0 0 pts/0 Z 19:55 0:00 [articacrypt]
>> <defunct>
>> root 26787 0.0 0.0 0 0 pts/0 Z 19:57 0:00 [articacrypt]
>> <defunct>
>> root 26788 0.0 0.0 0 0 pts/0 Z 19:57 0:00 [articacrypt]
>> <defunct>
>> root 26789 0.0 0.0 0 0 pts/0 Z 19:57 0:00 [articacrypt]
>> <defunct>
>> root 26790 0.0 0.0 0 0 pts/0 Z 19:57 0:00 [articacrypt]
>> <defunct>
>> root 26791 0.0 0.0 0 0 pts/0 Z 19:57 0:00 [articacrypt]
>> <defunct>
>> root 26886 0.0 0.0 0 0 pts/0 Z 19:59 0:00 [articacrypt]
>> <defunct>
>> root 26887 0.0 0.0 0 0 pts/0 Z 19:59 0:00 [articacrypt]
>> <defunct>
>> root 26888 0.0 0.0 0 0 pts/0 Z 19:59 0:00 [articacrypt]
>> <defunct>
>> root 26889 0.0 0.0 0 0 pts/0 Z 19:59 0:00 [articacrypt]
>> <defunct>
>> root 26890 0.0 0.0 0 0 pts/0 Z 19:59 0:00 [articacrypt]
>> <defunct>
>> root 27035 0.0 0.0 0 0 pts/0 Z 20:01 0:00 [articacrypt]
>> <defunct>
>> root 27036 0.0 0.0 0 0 pts/0 Z 20:01 0:00 [articacrypt]
>> <defunct>
>> root 27037 0.0 0.0 0 0 pts/0 Z 20:01 0:00 [articacrypt]
>> <defunct>
>> root 27038 0.0 0.0 0 0 pts/0 Z 20:01 0:00 [articacrypt]
>> <defunct>
>> root 27039 0.0 0.0 0 0 pts/0 Z 20:01 0:00 [articacrypt]
>> <defunct>
>>
>> Please how to clean theses "defunct" on the system...??????????????
>>
>
> You must do a fpWaitPID() call for each child process that you create.
>
> The best way to do this is to install a handler.
> The SIGCHILD signal is sent to a process whenever a child process exits.
>
> In the SIGCHILD handler, you can then do the fpWaitPID() call.
>
> Michael.
>
>
--
David Touzeau -------------------------- Linux Ubuntu Dapper 6.0.6
FreePascal-Lazarus,perl,delphi,php icq:160018849
More information about the fpc-pascal
mailing list