当前位置: 首页 > news >正文

建设网站的软件下载网站页面关键词优化

建设网站的软件下载,网站页面关键词优化,dedeseo网站,网站建设软件目录 1 信号机制 2 信号的产生 3 常用信号 4 相关命令 4.1 信号相关命令 kill / killall 4.2 信号发送 – kill / raise 4.3 定时器函数相关函数 – alarm /ualarm/ pause 4.4 信号捕捉#xff1a;设置信号响应方式 – signal /sigaction#xff0c;闹钟实现 4.5 子…目录 1 信号机制 2 信号的产生 3 常用信号 4 相关命令 4.1 信号相关命令 kill / killall  4.2 信号发送 – kill / raise 4.3 定时器函数相关函数 – alarm /ualarm/ pause 4.4 信号捕捉设置信号响应方式 – signal /sigaction闹钟实现 4.5 子进程结束信号使用SIGCHLD信号实现回收子进程 4.6 练习 掌握信号机制、常用信号、信号相关命令、信号发送、定时器、信号捕捉、信号集和信号屏蔽 1 信号机制 信号是在软件层次上对中断机制的一种模拟是一种异步通信方式。 linux内核通过信号通知用户进程不同的信号类型代表不同的事件 Linux对早期的unix信号机制进行了扩展 进程对信号有不同的响应方式 缺省方式  忽略信号  捕捉信号 2 信号的产生 按键产生系统调用函数产生比如raise kill硬件异常命令行产生 kill软件条件比如被0除访问非法内存等 3 常用信号 SIGCHLD              子进程 状态改变发给父进程的                                                                                 4 相关命令 4.1 信号相关命令 kill / killall  kill [-signal] pid 默认发送SIGTERM   -sig 可指定信号   pid  指定发送对象   示例 killall [-u user | prog]prog  指定进程名   user  指定用户名 4.2 信号发送 – kill / raise #include unistd.h #include signal.h int kill(pid_t pid, int sig); 功能发送信号 参数 pid:  0:发送信号给指定进程 0发送信号给跟调用kill函数的那个进程处于同一进程组的进程。 -1: 取绝对值发送信号给该绝对值所对应的进程组的所有组员。 -1发送信号给有权限发送的所有进程。 signum待发送的信号 int raise(int sig); //给自己发信号 给自己发信号等价于kill(getpid(), signo); 示例 #include sys/types.h #include signal.h #include unistd.h int main(){// kill(24149,11); //对进程24149发送一个段错误信号进程24149接收到信号报错结束raise(11); //对自己的进程发送一个段错误信号 }4.3 定时器函数相关函数 – alarm /ualarm/ pause int alarm(unsigned int seconds);功能定时发送SIGALRM给当前进程(一次性 返回值成功时返回上个定时器的剩余时间失败时返回EOF   参数seconds 定时器的时间   一个进程中只能设定一个定时器时间到时产生SIGALRM 示例 #include sys/types.h #include signal.h #include unistd.h int main(){alarm(3);while(1); }//运行结果 linuxlinux:~/Desktop$ ./alarm Alarm clock重复性闹钟函数  useconds_t ualarm(useconds_t usecs, useconds_t interval); 循环发送 以useconds为单位第一个参数为第一次产生时间第二个参数为间隔产生  发送alarm信号函数 int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);struct itimerval {struct timeval it_interval; // 闹钟触发周期struct timeval it_value; // 闹钟触发时间 };struct timeval {time_t tv_sec; /* seconds */suseconds_t tv_usec; /* microseconds */ }; 功能定时的发送alarm信号 参数 -which ITIMER_REAL以逝去时间递减。发送SIGALRM信号 ITIMER_VIRTUAL: 计算进程用户模式执行的时间。 发送SIGVTALRM信号 ITIMER_PROF: 进程在用户模式即程序执行时和核心模式即进程调度用时均计算时 间。 发送SIGPROF信号 -new_value  负责设定 timout 时间 -old_value   存放旧的timeout值一般指定为NULL int pause(void);进程一直阻塞直到被信号中断   被信号中断后返回-1errno为EINTR 示例 #include stdio.h #include stdlib.h #include unistd.h int main() {alarm(3);pause();printf(“I have been waken up!\n”);return 0; } $ ./a.out Alarm clock重要alarm经常用于实现超时检测 4.4 信号捕捉设置信号响应方式 – signal /sigaction闹钟实现 信号捕捉过程 定义新的信号的执行函数handle。使用signal/sigaction 函数把自定义的handle和指定的信号相关联。 signal函数 typedef void (*sighandler_t)(int); //它使用了typedef关键字定义了一个名为sighandler_t的新类型这个类型是一个指向函数的指针该函数以一个整型参数作为信号值返回值类型为void即不返回任何值。通过这个定义可以方便地声明和使用信号处理函数以对接收到的信号做出相应的处理。sighandler_t signal(int signum, sighandler_t handler);功能捕捉信号执行自定义函数  返回值成功时返回原先的信号处理函数失败时返回SIG_ERR 参数 signo 要设置的信号类型  handler 指定的信号处理函数: SIG_DFL代表缺省方式;SIG_IGN 代表忽略信号;   示例 #include signal.h #include stdio.h #include unistd.h #include stdlib.h #include string.h #include linux/posix_types.htypedef void (*sighandler_t)(int);sighandler_t oldact;void handle(int sig){printf(I cath the SIGINT \n);signal(SIGINT,oldact); //改回原先的信号处理如按ctrlc结束进程 }int main(){oldact signal(SIGINT,handle);while(1){sleep(1);} } sigaction函数  系统建议使用sigaction函数因为signal在不同类unix系统的行为不完全一样。 int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);参数说明: signum要设置或获取处理方式的信号编号。act指向struct sigaction结构体的指针用于设置新的处理方式。如果为NULL则不会改变原有的处理方式。oldact指向struct sigaction结构体的指针在函数返回时用于存储旧的处理方式。如果为NULL则不会保存旧的处理方式。 struct sigaction 结构体定义如下 struct sigaction {void (*sa_handler)(int);void (*sa_sigaction)(int, siginfo_t *, void *);sigset_t sa_mask;int sa_flags;void (*sa_restorer)(void); } sigaction 结构体的字段解释如下 sa_handler是一个函数指针用于指定信号处理函数表示简单的信号处理。sa_sigaction是一个函数指针用于指定信号处理函数表示复杂的信号处理。 它有三个参数可以获得关于信号的更详细的信息。 sa_flags参考值如下 SA_SIGINFO使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数 SA_RESTART使被信号打断的系统调用自动重新发起。 SA_RESETHAND信号处理之后重新设置为默认的处理方式。 SA_NODEFER使对信号的屏蔽无效即在信号处理函数执行期间仍能发出这个信号。 sa_mask用于设置在处理当前信号时要阻塞的信号集。sa_flags用于设置一些标志位例如SA_RESTART表示在被信号中断的系统调用重新启动。/通过将其设置为0表示不使用任何额外的标志位即默认行为。sa_restorer保留字段已不再使用。 函数返回值 成功返回0并将旧的信号处理方式保存到 oldact 中如果 oldact 不为 NULL。失败返回-1并设置 errno 来指示错误的原因。 通过调用 sigaction 函数可以为指定的信号设置新的处理方式或者获取当前的处理方式。这在编写信号处理程序时非常有用以便对信号进行正确的处理和响应。 示例定时器的实现使用alarm #include signal.h #include stdio.h #include unistd.h #include stdlib.h #include string.h #include linux/posix_types.htypedef void (*sighandler_t)(int);sighandler_t oldact;void handle(int sig){if(sig SIGINT){printf(I cath the SIGINT \n);}else if (sigSIGALRM){printf(second timer \n);alarm(1);}// signal(SIGINT,oldact); }int main(){struct sigaction act;act.sa_handler handle;act.sa_flags 0;sigemptyset(act.sa_mask);sigaction(SIGINT,act,NULL);alarm(1);sigaction(SIGALRM,act,NULL); // oldact signal(SIGINT,handle);while(1){sleep(1);}} 示例定时器的实现settimer实现 #include signal.h #include stdio.h #include unistd.h #include stdlib.h #include string.h #include linux/posix_types.h #include sys/time.htypedef void (*sighandler_t)(int);sighandler_t oldact;void handle(int sig){if(sig SIGINT){printf(I cath the SIGINT \n);}else if (sigSIGALRM){printf(second timer \n); // alarm(1);}// signal(SIGINT,oldact); }int main(){struct sigaction act;act.sa_handler handle;act.sa_flags 0;sigemptyset(act.sa_mask); // sigaction(SIGINT,act,NULL); // alarm(1);struct itimerval timevalue;timevalue.it_interval.tv_sec 1;timevalue.it_interval.tv_usec 0;timevalue.it_value.tv_sec 5;timevalue.it_value.tv_usec 0;setitimer(ITIMER_REAL,timevalue, NULL);sigaction(SIGALRM,act,NULL); // oldact signal(SIGINT,handle);while(1){// sleep(1); //sleep也是用alarm实现的}} 示例 // 头文件省略 void handler (int signo) {if (signo SIGINT) {printf(“I have got SIGINT!\n”); }if (signo SIGQUIT) {printf(“I have got SIGQUIT\n”); } }int main() {signal(SIGINT, handler);signal(SIGQUIT, handler);while ( 1 ) pause();return 0; }4.5 子进程结束信号使用SIGCHLD信号实现回收子进程 SIGCHLD的产生条件 1子进程终止时 2子进程接收到SIGSTOP信号停止时 3子进程处在停止态接受到SIGCONT后唤醒时 SIGCHLD可以用来处理子进程退出的僵尸 之前是使用wait来回收现在使用信号来配合wait回收解决父进程阻塞的问题 示例 #include stdio.h #include signal.h #include sys/wait.h #include unistd.h #include stdlib.hvoid handle(int sig){wait(NULL);printf(Get sig %d\n,sig);}int main(){pid_t pid;struct sigaction act;act.sa_handler handle;act.sa_flags 0;sigemptyset(act.sa_mask);pid fork();if(pid0){//wait(NULL); //利用信号处理可以让父进程异步操作接着干自己的事情而不阻塞sigaction(SIGCHLD,act,NULL);while(1){printf(this is father process\n);sleep(1);}}else if(pid0){sleep(5);exit(0);}}执行完通过ps 命令查看没有僵尸进程。 4.6 练习 实现捕捉SIGINT信号在屏幕上打印 Ctrl c #include stdlib.h #include string.h #include linux/posix_types.htypedef void (*sighandler_t)(int);sighandler_t oldact;void handle(int sig){printf(CtrlC\n);//signal(SIGINT,oldact); //改回原先的信号处理按ctrlc结束进程 }int main(){oldact signal(SIGINT,handle);while(1){sleep(1);} }
http://www.ho-use.cn/article/10823133.html

相关文章:

  • 简述网站建设的深圳百度推广
  • 网页是网站的什么颜色好看查询网站备案时间
  • 品牌和网站建设wordpress 新页面
  • 律师论坛网站模板html代码图片
  • 网站建设安全标准wordpress all in one seo
  • 安徽建设厅网站进不去html5做网站系统
  • 网上挣钱最快的平台百度seo排名优化软件分类
  • 阅读网站模板下载wordpress the7 中文视频教程
  • 昆明网站开发推广会员管理系统app
  • 如何在网上建立自己的网站爱最好网站建设
  • 网站优化设计方案怎么做期货网站开发
  • 青岛免费网站建站模板网站如何做推广
  • 崇左市城市投资建设有限公司网站英文wordpress自动更新
  • 游戏网站app漳州市住房建设局网站
  • 常州西站建设规划网站备案 登陆
  • 做一个网站需要多少钱大概企业网站建设报价
  • 安徽网站开发辽宁世纪兴电子商务服务中心
  • 阿里巴巴网站开发工具p2p网站怎么做
  • 网站根目录下网址导航网址大全
  • 洛阳网站建设制作多少钱线上推广的意义
  • 帝国cms制作网站地图asp.net 网站写好后如何运行
  • 高端品牌网站定制织梦网站首页幻灯片不显示
  • 做卖车网站需要什么手续企业数据哪里找
  • 当今做啥网站致富网络营销推广公司网站有哪些
  • 克拉玛依网站建设公司北辰网站建设
  • 网站服务器选购网站建设与发布
  • 怎么看网站建设时间网页版微信小程序
  • siteground建站教程重庆关键词自然排名
  • 天津网站建设 Wordpress宣传片拍摄制作流程
  • 南昌定制网站开发公司网页美工工资水平