#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
static void sig_child(int signo)
{
pid_t pid;
int stat;
while((pid=waitpid(-1,&stat,WNOHANG))>0);
return;
}
int main()
{
signal(SIGCHLD,sig_child);
int npid = -1;
npid = fork();
if(npid == 0){ //child
clearfile();
}else{ //parent
while(1){
sleep(3);
if(getpgid(npid) < 0){
kill(npid,9);
npid = fork();
if(npid == 0){
clearfile();
}
}
}
}
}
void clearfile()
{
struct stat statbuf;
char szpath[] ="/home/jzb/source/myprint.log";
int nret;
int fd ;
while(1){
nret = stat(szpath,&statbuf);
if(statbuf.st_size >= 1024*1024*1024){
fd = open(szpath,O_CREAT|O_TRUNC);
close(fd);
}
sleep(1);
}
}
主程式通過while迴圈不斷的檢測進程所屬是否有效(通常情況下,當進程終止時,所屬的進程組號為-1,為此,判斷進程是否在運行)。如果檢測到子進程結束,則將重啟開啟子進程。