用shell编写c程序:实现父进程和子进程,父进程3秒打印一次id,子进程1s打印一次id, 接受从键盘输入的ctrl-c信号后,两个进程分别打印已接受信号,并退出。
时间: 2023-12-11 15:03:49 浏览: 77
好的,这个问题可以通过使用shell脚本和C语言来实现。下面是实现的代码:
```shell
#!/bin/bash
trap "echo 'Parent process received signal SIGINT'; exit" SIGINT
trap "echo 'Child process received signal SIGINT'; exit" SIGINT
gcc -o prog prog.c
./prog &
pid=$!
while true
do
echo "Parent process ID: $$"
sleep 3
done &
wait $pid
```
```c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void signal_handler(int signum)
{
printf("Received signal SIGINT\n");
exit(0);
}
int main()
{
signal(SIGINT, signal_handler);
pid_t pid = fork();
if(pid == 0)
{
while(1)
{
printf("Child process ID: %d\n", getpid());
sleep(1);
}
}
else
{
while(1)
{
printf("Parent process ID: %d\n", getpid());
sleep(3);
}
}
return 0;
}
```
这段脚本首先使用`trap`命令设置了当接收到`SIGINT`信号时,分别输出提示信息并退出。然后编译并运行C程序`prog`,并获取它的PID。接下来在后台执行一个循环,每隔3秒输出一次父进程的PID。同时在C程序中创建一个子进程,每隔1秒输出一次子进程的PID。子进程的输出在`while`循环中不断进行,父进程的输出也在`while`循环中进行,直到接收到子进程的退出信号,等待子进程结束后结束自身进程。
在运行脚本后,可以通过`ctrl-c`信号来测试程序的退出功能。
阅读全文
相关推荐

















