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

jsp做网站 案例网站优化塔山双喜

jsp做网站 案例,网站优化塔山双喜,大型视频网站建设方案,岳阳企业网站定制开发进程间通信——信号 宗旨#xff1a;技术的学习是有限的#xff0c;分享的精神是无限的。 一、信号和中断 1、信号基本概念 #xff08;1#xff09;发送信号#xff1a;产生信号#xff0c;有多种发送信号的方式【一个进程到另一个进程#xff0c;内核向用户#x…进程间通信——信号 宗旨技术的学习是有限的分享的精神是无限的。 一、信号和中断 1、信号基本概念 1发送信号产生信号有多种发送信号的方式【一个进程到另一个进程内核向用户进程向自己】 2安装信号设置信号到来时不再执行默认操作而是执行自定义的代码。 3递送信号一个信号被操作系统发送到目标进程引起某段处理程序的执行。 4捕获信号被递送的信号在目标进程引起某段处理程序的执行。 5屏蔽信号进程告诉操作系统暂时不接受某些信号。 6忽略信号进程被递送到目标进程但目标进程不处理直接丢弃。 7未决信号信号已经产生但因目标进程暂时屏蔽该信号而不能被目标进程捕获到的信号。 8可靠信号和不可靠信号编号小于32的信号是不可靠信号大于32的是可靠信号。 信号的“未决”是一种状态指的是从信号的产生到信号被处理前的这一段过程。信号的“屏蔽”是一个开关动作指的是暂时阻止该信号被处理。 输入命令kill –l查看系统定义的信号列表 $ kill-l 1) SIGHUP      2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP 6) SIGABRT     7) SIGEMT       8) SIGFPE       9) SIGKILL     10) SIGBUS 11)SIGSEGV     12) SIGSYS      13) SIGPIPE     14) SIGALRM     15) SIGTERM 16)SIGURG      17) SIGSTOP     18)SIGTSTP     19) SIGCONT     20) SIGCHLD 21)SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU     25) SIGXFSZ 26)SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGPWR      30) SIGUSR1 31)SIGUSR2     32) SIGRTMAX 二、发送信号 发送信号是指一个进程向另一个进程发送某个信号值但实际并不是直接发送的而是由OS转发的。产生一个信号有多种情况 1 用户按下Ctrl-C这个键盘输入产生一个硬件中断。 2 硬件异常产生信号。对一个无效存储访问的进程产生一个SIGSEGV 3 终止进程信号。其他进程调用kill()函数可将信号发送给另一个进程或进程组。 4 软件异常产生信号。 1、kill发送一个信号到进程 ——传递一个信号给指定进程使用kill()函数给当前进程使用raise()唤醒设置定时使用alarm() 1函数原型 #includesignal.h intkill(pid_t pid, int sig); 2函数参数 pid要被传递信号的进程号PID pid0将信号发送给进程的PID值为pid的进程 pid0将信号发送给和当前进程在同一进程组的所有进程 pid-1将信号发送给系统内的所有进程 pid0将信号发送给进程组号PGID为pid绝对值的所有信号 sig发送的信号值 3返回值 成功返回0失败返回-1 可向某个进程发送kill -0信号以检测进程是否存在因为当前进程总是存在的 kill(getpid, 0); 2、raise自举一个信号 ——给当前进程发送一个信号即唤醒一个进程。 1函数原型 #include signal.h int raise(int sig); 2函数参数 sig发送的信号值 3返回值 成功返回0失败返回-1 此函数相当于 if(kill(getpid(),sig) -1) { perror(“raise”); } 3、alarm定时 ——传递定时信号即在多少时间内产生SIGALRM信号调用一次产生一个信号。 1函数原型 #include unistd.h int alarm(unsigned int seconds); 2函数参数 seconds多少时间内发送SIGALRM信号给当前进程 seconds0取消所有发出的报警请求 3返回值 在调用alarm之前没有调用过alarm成功返回0失败返回-1 此前调用过alarm函数则将重新设置调用进程的闹钟成功将以当前时间为基准返回值为上次设置的alarm将在多少时间内产生SIGALRM信号。 4、ualarm定时 ——使当前进程在指定时间内产生SIGALRM信号然后每隔指定时间重复产生SIGALRM信号。 1函数原型     useconds_t ualarm(useconds_t value,useconds_t interval); 2函数参数 value指定时间us内产生SIGALRM信号 interval每隔指定时间重复产生SIGALRM 3返回值 成功返回0 三、安装信号和捕捉信号 1、信号处理方法 1 忽略此信号。 2 执行该信号的默认处理动作。 3 提供一个信号处理函数要求内核在处理该信号时切换到用户态执行这个处理函数这种方 式称为捕捉Catch一个信号。 2、signal安装信号 ——信号都有默认的处理方式未做特殊处理将执行默认操作若要做特殊处理则要安装信号处理函数。 1函数原型 #include signal.h typedef void (*sighandler_t)(int); sighandler_t signal(int sig, sighandlerhandler); 2函数参数 sig接收到的信号 handler接收到此信号后的处理代码入口 3返回值 成功返回指向针对此信号的上一次设置执行失败返回SIG_EER-1错误。 3、sigaction安装信号 ——signal只能提供简单的信号安装操作并逐步并淘汰。此函数可用来检查和更改信号处理操作。 1函数原型 #include signal.h int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);struct sigaction {void (*sa_handler)(int);/* addr of signal handler, *//* or SIG_IGN, or SIG_DFL*/sigset_t sa_mask; /*additional signals to block */int sa_flags; /* signaloptions, Figure 10.16 *//* alternate handler */void (*sa_sigaction)(int, siginfo_t *, void *); }; 2函数参数 signo指定信号的编号 若act指针非空则根据act修改该信号的处理动作。若oact指针非 空则通过oact传出该信号原来的处理动作。 3返回值 成功返回0失败返回-1。 将sa_handler赋值为常数SIG_IGN传给sigaction表示忽略信号赋值为常数SIG_DFL表示执行系统默 认动作赋值为一个函数指针表示用自定义函数捕捉信号或者说向内核注册了一个信号处理函 数该函数返回值为void可以带一个int参数通过参数可以得知当前信号的编号这样就可以 用同一个函数处理多种信号。显然这也是一个回调函数不是被main函数调用而是被系统所调用。 当某个信号的处理函数被调用时内核自动将当前信号加入进程的信号屏蔽字当信号处理函数返 回时自动恢复原来的信号屏蔽字这样就保证了在处理某个信号时如果这种信号再次产生那么它会被阻塞到当前处理结束为止。如果在调用信号处理函数时除了当前信号被自动屏蔽之外还希望自动屏蔽另外一些信号则用sa_mask字段说明这些需要额外屏蔽的信号当信号处理函数返 回时自动恢复原来的信号屏蔽字。 sa_flags字段包含一些选项我把sa_flags设为0 sa_sigaction是实时信号的处理函数。  四、信号集操作 信号忽略系统仍然传递该信号指示相应进程对该信号不做任何处理。 信号屏蔽即使传递信号给该进程该进程也不捕捉信号。 #define SIGSET_NWOEDS (1024 / (8 * sizeof(unsigned long int)))typedef struct {unsigned long int val[SIGSET_NWOEDS]; } sigset_t; 1、sigprocmask ——设置进程屏蔽信号集 1函数原型 #include signal.h int sigprocmask(int how, const sigset_t *set, sigset_t *oset); 2函数参数 如果oset是非空指针则读取进程的当前信号屏蔽字通过oset参数传出。如果set是非空指针则更改进程的信号屏蔽字参数how指示如何更改。如果oset和set都是非空指针则先将原来的信号 屏蔽字备份到oset里然后根据set和how参数更改信号屏蔽字。假设当前的信号屏蔽字为mask下表说明了how参数的可选值。 SIG_BLOCK set包含了我们希望添加到当前信号屏蔽字的信号相当 于maskmask|set SIG_UNBLOCK set包含了我们希望从当前信号屏蔽字中解除阻塞的信号相当 于maskmask~set SIG_SETMASK 设置当前信号屏蔽字为set所指向的值相当于maskset 3返回值 若成功则为0若出错则为-1 2、sigpending #include signal.h int sigpending(sigset_t *set); ——读取当前进程的未决信号集通过set参数传出。调用成功则返回0出错则返回-1。 #includesignal.h #includestdio.h #includeunistd.hvoid printsigset(const sigset_t *set) {int i;for (i 1; i 32; i)if (sigismember(set, i) 1){putchar(1);}else{putchar(0);}puts(); }int main(void) {sigset_t s, p;sigemptyset(s);sigaddset(s, SIGINT);sigprocmask(SIG_BLOCK, s, NULL);while (1){sigpending(p);printsigset(p);sleep(1);}return 0; }span stylefont-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); /span 3、信号集 #include signal.h int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo); 函数sigemptyset初始化set所指向的信号集使其中所有信号的对应bit清零表示该信号集不包含任何有效信号。函数sigfillset初始化set所指向的信号集使其中所有信号的对应bit置位表示 该信号集的有效信号包括系统支持的所有信号。注意在使用sigset_t类型的变量之前一定要调用sigemptyset或sigfillset做初始化使信号集处于确定的状态。初始化sigset_t变量之后就可以在调用sigaddset和sigdelset在该信号集中添加或删除某种有效信号。这四个函数都是成功返 回0出错返回-1。 sigismember是一个布尔函数用于判断一个信号集的有效信号中是否包含某种信号若包含则返回1不包含则返回0出错返回-1。 五、等待信号 进程可以因等待某些特定的信号而阻塞pause()函数用来等待除当前进程外的任意信号而sigsuspend()用来等待指定信号以外的任意信号。 1、pause ——使调用进程挂起直到有信号递达 1函数原型 #include unistd.h int pause(void); 2参数返回值 如果信号的处理动作是终止进程则进程终止 pause函数没有机会返回如果信号的处理动作是忽略则进程继续处于挂起状态 pause不返回如果信号的处理动作是捕捉则调用了信号处理函数之后pause返回-1 errno设置为EINTR 所以pause只有出错的返回值。 // 用alarm和pause实现sleep(3)函数 #include unistd.h #include signal.h #include stdio.h void sig_alrm(int signo) {/* nothing to do */ } unsigned int mysleep(unsigned int nsecs) {struct sigaction newact, oldact;unsigned int unslept;newact.sa_handler sig_alrm;sigemptyset(newact.sa_mask);newact.sa_flags 0;sigaction(SIGALRM, newact, oldact);alarm(nsecs);pause();unslept alarm(0);sigaction(SIGALRM, oldact, NULL);return unslept; } int main(void) {while(1){mysleep(2);printf(Two secondspassed\n);}return 0; } 1 main函数调用mysleep函数后者调用sigaction注册了SIGALRM信号的处理函数sig_alrm。 2 调用alarm(nsecs)设定闹钟。 3 调用pause等待内核切换到别的进程运行。 4 nsecs秒之后闹钟超时内核发SIGALRM给这个进程。 5 从内核态返回这个进程的用户态之前处理未决信号发现有SIGALRM信号其处理函数 是sig_alrm。 6 切换到用户态执行sig_alrm函数进入sig_alrm函数时SIGALRM信号被自动屏蔽从sig_alrm函数返回时SIGALRM信号自动解除屏蔽。然后自动执行系统调用sigreturn再次进入 内核再返回用户态继续执行进程的主控制流程 main函数调用的mysleep函数。 7pause函数返回-1然后调用alarm(0)取消闹钟调用sigaction恢复SIGALRM信号以前的处理。 可重入函数——如果一个函数符合以下条件之一则是不可重入的 调用了malloc或free因为malloc也是用全局链表来管理堆的。 调用了标准I/O库函数。标准I/O库的很多实现都以不可重入的方式使用全局数据结构。 【通俗说使用了全局变量的都是不可重入的】
http://www.zqtcl.cn/news/57694/

相关文章:

  • 电商网站seo方案网页版微信怎么截图
  • 关闭网站弹窗代码网站建设环境
  • 电子商务网站设计原理书籍网站建设技术实现难点
  • 集团公司做网站金融企业网站源码
  • 四川网站建设外包业务自贡做网站公司
  • 免费企业网站制作wordpress新界面
  • 专业柳州网站建设价格芜湖有没有网站建设公司吗
  • 彩票网站开发合法吗python后端开发需要学什么
  • 网站建设报价清单网页设计模板html代码总结知识点
  • 网站备案资料 下载自己怎么优化我网站关键词
  • 做网站用户充值提现互联网站建设维护有培训班吗
  • 四川建设安全协会网站网站设计规划范文
  • 佛山 网站开发个人网站建设方案书用备案的
  • 造纸公司网站建设点广告挣钱网站有哪些
  • 郑州北环网站建设培训左右悬停代码网站
  • 西安知名的集团门户网站建设公司三个关键词介绍自己
  • 外贸站seo运城网站建设哪个好
  • wix建设网站教程郑州英语网站建设
  • 域名申请好怎么做网站甘肃肃第八建设集团网站
  • 免费网站建设软件有哪些网站功能报价
  • 手机网站架构海口企业做网站设计
  • 单个页面的网站企业网站运营推广难做吗
  • 建设网站要服务器吗网站运营与管理的内容有哪些
  • 怎么把代码添加网站服务器租用哪家好
  • 移动互联网 传统网站做网站阿里云买哪个服务器好点
  • 聚商网络营销公司服务内容seo快速排名是什么
  • 网站开发需要什么专业知识门户网站开发平台
  • 做网站抬头网页设计欣赏怎么做
  • 做动画 的 网站企业简介怎么写吸引人
  • 响应式机械类网站市场营销课程