该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
进程A
int main() {
pid_t p = fork();
if (p < 0) {
perror("create child process error\n");
exit(1);
}
else if (p > 0) {
exit(0);
}
chdir("/home/fbw/linux_experment");
umask(000);
for (int i = 0; i < getdtablesize(); i++)
close(i);
// store pid
int pid_fd = open("pid_test.txt", O_WRONLY | O_CREAT, 0777);
if (pid_fd < 0) {
perror("open file error\n");
exit(1);
}
char buff[5];
int pid = getpid();
snprintf(buff, sizeof(buff), "%d", pid);
write(pid_fd, buff, sizeof(buff));
close(pid_fd);
char buf[1] = { '5' };
int fd = open("trust.txt", O_WRONLY | O_CREAT, 0777);
while (1) {
write(fd, buf, sizeof(buf));
sleep(5);
}
close(fd);
return 0;
}
进程B
int main() {
pid_t pid = fork();
if (pid < 0) {
perror("create error\n");
exit(1);
}
else if (pid > 0) {
exit(0);
}
chdir("/");
umask(000);
for (int i = 0; i < getdtablesize(); i++)
close(i);
while (1) {
int fd = open("/home/fbw/linux_experment/pid_test.txt", O_RDONLY);
if (fd == -1) {
perror("open error");
exit(1);
}
char buff[6];
int len = read(fd, buff, sizeof(buff));
close(fd);
int pidoftest = atoi(buff);
int res = kill(pidoftest, 0);
printf("%d ", pidoftest);
if (res == 0) {
printf("running\n");
}
else {
printf("starting...\n");
system("/home/fbw/linux_experment/daemon/test");
}
sleep(5);
}
return 0;
}