总结了Linux中经常用到的sleep和exit函数
涉及
sleep
kill命令
exit _exit _Exit
atexit
tmpfile
abort
setjmp longjmp
exit部分是转载内容
1. Linux sleep库函数
#include <unistd.h>
使调用sleep函数的线程休眠seconds秒。如果中间有一个未被忽略的信号到达则终止休眠,如果该程序没有终止(比如对于某个信号定义了信号处理程序)从sleep函数后面的语句继续执行。
返回剩余的休眠秒数。即如果请求的休眠时间已经过去则返回0,如果中途被信号处理程序中断则返回剩余的休眠秒数。
unsigned int sleep(unsigned int seconds);
示例:用一个信号唤醒一个进程的休眠
test4.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
//信号处理函数
void sigFunc(int sig){
printf("catch signal 14\n");
}
int main(){
int seconds = 20;
signal(SIGALRM ,sigFunc); //注册SIGALRM信号的信号处理函数
printf("this proceed pid is %d\n",getpid());
printf("begin sleep %d seconds\n",seconds);
int lastTime = sleep(seconds); //调用线程休眠seconds秒并返回剩余休眠时间
printf("stop sleeping, last %d seconds\n",lastTime);
}
运行结果:在一个终端编译并运行以上程序,看出该进程pid为3834。
然后另开另一个进程输入 kill -14 3834
向3834进程发送信号14。可以看出该信号被进程处理函数成功捕获,sleep被终止并返回剩余休眠时间
xtark@xtark-vmpc:~/桌面/linux_study/section8$ gcc test4.c
xtark@xtark-vmpc:~/桌面/linux_study/section8$ ./a.out
this proceed pid is 3834
begin sleep 20 seconds
catch signal 14
stop sleeping, last 4 seconds
补充:Linux中的kill命令
可以通过kill -l
查看所有信号
xtark@xtark-vmpc:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18)