我正在尝试在shell脚本中处理ctrl+c。我有一段在while循环中运行的代码,但是我从shell脚本中调用二进制文件,并在后台运行它,所以当我想停止二进制文件时,它应该停止。代码在hello.c
下面
#include <stdio.h>
int main()
{
while(1)
{
int n1,n2;
printf("Enter the first number\n");
scanf("%d",&n1);
printf("Enter the second number\n");
scanf("%d",&n2);
printf("Entered number are n1 = %d , n2 =%d\n",n1,n2);
}
}
字符串
下面是我使用的bash脚本。
#/i/bin/sh
echo run the hello binary
./hello < in.txt &
trap_ctrlc()
{
ps -eaf | grep hello | grep -v grep | awk '{print $2}' | xargs kill -9
echo trap_ctrlc
exit
}
trap trap_ctrlc SIGHUP SIGINT SIGTERM
型
启动脚本后,hello二进制文件将持续运行。我用kill-9 pid命令从其他终端杀死了这个二进制文件。
我尝试了trap_ctrlc函数,但它不起作用。如何在shell脚本中处理ctrl+c?
在in.txt
中,我添加了输入,这样我就可以将这个文件直接传递给二进制文件。
1
2
型
输出量:
Enter the first number
Enter the second number
Entered number are n1 = 1 , n2 =2
Enter the first number
Enter the second number
Entered number are n1 = 1 , n2 =2
Enter the first number
Enter the second number
Entered number are n1 = 1 , n2 =2
型
而且是持续不断的。
1条答案
按热度按时间yzuktlbb1#
更改c程序,使其检查阅读数据是否实际成功:
字符串
现在,当
in.txt
的输入耗尽时,它将终止。要使某个对象可以多次读取
in.txt
,可以在bash脚本中创建一个循环,该循环将./hello
永远(或直到它被杀死)。范例:
型
可能的输出:
型
另一种选择是在
wait
被中断后杀死子进程:型