为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

qq_康斯坦丁_0 的学生作业:

#include #include #include #include #include #include #include // 子进程B的信号处理函数 void sig_handler(int signo) { printf(“子进程B收到信号: %s\n”, strsignal(signo)); } int main() { pid_t pid1, pid2; int status; // 创建第一个子进程(A) pid1 = fork(); if (pid1 < 0) { perror("创建子进程A失败"); exit(1); } if (pid1 == 0) { // 子进程A代码 printf("子进程A (PID: %d) 开始运行,使用默认信号处理方式\n", getpid()); while(1) { sleep(1); } exit(0); } else { // 父进程继续创建第二个子进程(B) pid2 = fork(); if (pid2 < 0) { perror("创建子进程B失败"); exit(1); } if (pid2 == 0) { // 子进程B代码 // 设置SIGUSR2的信号处理函数 if (signal(SIGUSR2, sig_handler) == SIG_ERR) { perror("设置信号处理函数失败"); exit(1); } printf("子进程B (PID: %d) 开始运行,使用自定义信号处理函数\n", getpid()); while(1) { sleep(1); } exit(0); } else { // 父进程代码 printf("父进程 (PID: %d) 创建了两个子进程: A(%d) 和 B(%d)\n", getpid(), pid1, pid2); // 等待3秒,让子进程有时间打印信息 sleep(3); // 向子进程A发送SIGUSR1信号 printf("\n父进程正在发送SIGUSR1信号给子进程A...\n"); if (kill(pid1, SIGUSR1) == 0) { printf("成功发送SIGUSR1信号给子进程A (PID: %d)\n", pid1); } else { perror("向子进程A发送SIGUSR1信号失败"); } // 向子进程B发送SIGUSR2信号 printf("\n父进程正在发送SIGUSR2信号给子进程B...\n"); if (kill(pid2, SIGUSR2) == 0) { printf("成功发送SIGUSR2信号给子进程B (PID: %d)\n", pid2); } else { perror("向子进程B发送SIGUSR2信号失败"); } // 等待一秒让信号处理完成 sleep(1); // 终止子进程 printf("\n父进程正在终止子进程...\n"); kill(pid1, SIGKILL); kill(pid2, SIGKILL); // 等待子进程结束 waitpid(pid1, &status, 0); printf("子进程A (PID: %d) 已终止\n", pid1); waitpid(pid2, &status, 0); printf("子进程B (PID: %d) 已终止\n", pid2); printf("\n所有子进程已终止,父进程退出\n"); } } return 0; }

得分 100
学习任务

qq_康斯坦丁_0 的学生作业:

#include #include #include #include #include #include int main() { pid_t pid1, pid2; int status; // 创建第一个子进程 pid1 = fork(); if (pid1 < 0) { perror("第一个子进程创建失败"); exit(1); } if (pid1 == 0) { // 第一个子进程代码 printf("子进程1 (PID: %d) 开始运行\n", getpid()); while(1) { sleep(1); } exit(0); } else { // 父进程继续创建第二个子进程 pid2 = fork(); if (pid2 < 0) { perror("第二个子进程创建失败"); exit(1); } if (pid2 == 0) { // 第二个子进程代码 printf("子进程2 (PID: %d) 开始运行\n", getpid()); while(1) { sleep(1); } exit(0); } else { // 父进程代码 printf("父进程 (PID: %d) 创建了两个子进程: %d 和 %d\n", getpid(), pid1, pid2); // 等待3秒,让子进程有时间打印信息 sleep(3); // 向两个子进程发送SIGKILL信号 printf("\n父进程正在发送SIGKILL信号给子进程...\n"); if (kill(pid1, SIGKILL) == 0) { printf("成功发送SIGKILL信号给子进程1 (PID: %d)\n", pid1); } else { perror("向子进程1发送SIGKILL信号失败"); } if (kill(pid2, SIGKILL) == 0) { printf("成功发送SIGKILL信号给子进程2 (PID: %d)\n", pid2); } else { perror("向子进程2发送SIGKILL信号失败"); } // 等待两个子进程结束 waitpid(pid1, &status, 0); printf("子进程1 (PID: %d) 已终止\n", pid1); waitpid(pid2, &status, 0); printf("子进程2 (PID: %d) 已终止\n", pid2); printf("\n所有子进程已终止,父进程退出\n"); } } return 0; }

得分 100
学习任务

qq_康斯坦丁_0 的学生作业:

#include #include #include #include #include #include #include #include #define FIFO_PATH “/tmp/time_fifo” #define BUFFER_SIZE 128 // 时间发送进程 void time_sender() { int fd; char buffer[BUFFER_SIZE]; time_t current_time; struct tm *time_info; // 创建FIFO mkfifo(FIFO_PATH, 0666); printf("[发送进程] 等待接收进程连接...\n"); fd = open(FIFO_PATH, O_WRONLY); while (1) { // 获取当前时间 time(&current_time); time_info = localtime(&current_time); strftime(buffer, BUFFER_SIZE, "%Y-%m-%d %H:%M:%S", time_info); // 写入FIFO write(fd, buffer, strlen(buffer) + 1); printf("[发送进程] 发送时间: %s\n", buffer); sleep(1); // 每秒发送一次 } close(fd); unlink(FIFO_PATH); } // 时间接收进程 void time_receiver() { int fd; char buffer[BUFFER_SIZE]; ssize_t bytes_read; printf("[接收进程] 正在连接到FIFO...\n"); fd = open(FIFO_PATH, O_RDONLY); while (1) { // 从FIFO读取时间 bytes_read = read(fd, buffer, BUFFER_SIZE); if (bytes_read > 0) { printf("[接收进程] 接收到时间: %s\n", buffer); } } close(fd); } int main(int argc, char *argv[]) { if (argc != 2) { printf(“使用方法: %s [sender|receiver]\n”, argv[0]); return 1; } if (strcmp(argv[1], "sender") == 0) { time_sender(); } else if (strcmp(argv[1], "receiver") == 0) { time_receiver(); } else { printf("无效的参数。请使用 'sender' 或 'receiver'\n"); return 1; } return 0; }

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号