#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/prctl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <dirent.h>
static int my_popen(const char *cmd, char *out, int len)
{
int ret;
FILE *stream;
memset(out, 0, len);
stream = popen(cmd, "r");
ret = fread(out, sizeof(char), len, stream);
pclose(stream);
return ret;
}
static int check_rjservice()
{
char test[256];
pid_t pid;
int stat = 0;
while(1){
memset(test, 0, sizeof(test));
my_popen("ps -ef | grep '/sbin/Test/test.sh' | grep -v 'grep' ", test, sizeof(test));
//printf("%s\n", test);
if(test[0] == 0) {
printf("test.sh NOT RUNNING\n");
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
break;
case 0:
// 这是在子进程中,调用execlp切换为ps进程
printf("child\n");
prctl(PR_SET_NAME, "child", NULL, NULL, NULL);
execlp("bash","bash","/sbin/Test/test.sh", 0);
//my_popen("sh /sbin/Test/test.sh &", test, sizeof(test));
//system("sh /sbin/Test/test.sh &");
break;
default:
pid = wait(&stat);
printf("Child has finished: PID = %d\n", pid);
//检查子进程的退出状态
if(WIFEXITED(stat))
printf("Child exited with code %d\n", WEXITSTATUS(stat));
else
printf("Child terminated abnormally\n");
printf("Parent, \n");
break;
}
} else {
printf("test.sh RUNNING\n");
}
sleep(3);
}
return 0;
}
C语言fork启进程用exec执行脚本程序
最新推荐文章于 2022-05-07 16:34:41 发布