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

如何搭建网站的支付接口英文网页

如何搭建网站的支付接口,英文网页,保定建站公司模板,网站建设分为几类1.信号是什么#xff1f; 信号其实就是一个软件中断。 例#xff1a; 输入命令#xff0c;在Shell下启动一个前台进程。用户按下Ctrl-C#xff0c;键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码#xff0c;则该进程的用户空间代码暂停执行#xff0c;…1.信号是什么 信号其实就是一个软件中断。 例 输入命令在Shell下启动一个前台进程。用户按下Ctrl-C键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码则该进程的用户空间代码暂停执行 CPU从用户态切换到内核态处理硬件中断。终端驱动程序将Ctrl-C解释成一个SIGINT信号记在该进程的PCB中也可以说发送了一个SIGINT信号给该进程。当某个时刻要从内核返回到该进程的用户空间代码继续执行之前首先处理PCB中记录的信号发现有一个SIGINT信号待处理而这个信号的默认处理动作是终止进程所以直接终止进程而不再返回它的用户空间代码执行。 在这个例子中由ctrlc产生的硬件中断就是一个信号。CtrlC产生的信号只能发送给前台进程命令后加就可放到后台运行。 Shell可同时运行一个前台进程和任意多个后台进程只有前台进程才能接受到像CTRLC这种控制键产生的信号。 2.信号的种类 使用命令查看 kill -l非可靠信号1~31号信号信号可能会丢失 可靠信号34~64号信号信号不可能丢失 SIGHUP1号信号Hangup detected on controlling terminal or death of controlling process在控制终端上挂起信号或让进程结束ationterm SIGINT2号信号Interrupt from keyboard键盘输入中断ctrl c actionterm SIGQUIT3号信号Quit from keyboard键盘输入退出**ctrl |** actioncore产生core dump文件 SIGABRT6号信号Abort signal from abort(3)非正常终止double freeactioncore SIGKILL9号信号Kill signal杀死进程信号actionterm该信号不能被阻塞、忽略、自定义处理 SIGSEGV11号信号Invalid memory reference无效的内存引用解引用空指针、内存越界访问actioncore SIGPIPE13号信号Broken pipe: write to pipe with no readers管道中止: 写入无人读取的管道会导致管道破裂actionterm SIGCHLD17号信号Child stopped or terminated子进程发送给父进程的信号但该信号为忽略处理的 SIGSTOP19号信号Stop process停止进程actionstop SIGTSTP20号信号Stop typed at terminal终端上发出的停止信号ctrl zactionstop 具体的信号采取的动作和详细信息可查看man 7 signal 3.信号的产生 3.1硬件产生 硬件产生即通过终端按键产生的信号 ctrl cSIGINT(2)发送给前台进程 进程放到后台运行fg 把刚刚放到后台的进程再放到前台来运行ctrl zSIGTSTP(20)一般不用除非有特定场景ctrl | SIGQUIT(3)产生core dump文件 产生core dump文件的条件 当前OS一定不要限制core dump文件的大小ulimit -a 磁盘空间要足够 如何产生 3.1 解引用空指针收到11号信号产生core dump文件 3.2 内存访问越界程序一旦崩溃就会收到11号信号也就会产生core dump文件 3.3 double free收到6号信号并产生core dump。 3.4 freeNULL不会崩溃3.2软件产生 软件产生即调用系统函数向进程发信号 kill函数 #include sys/types.h #include signal.h int kill(pid_t pid, int sig); 参数解释 pid进程号 sig要发送的信号值 返回值成功返回0失败返回-1并设置错误kill命令kill -[信号] pidabortvoid abort(void);收到6号信号谁调用该函数谁就收到信号alarmunsigned int alarm(unsigned int seconds);收到14号信号告诉内核在seconds秒后给进程发送SIGALRM信号该信号默认处理动作为终止当前进程。 4.信号的注册 信号注册又分为可靠信号的注册和非可靠信号的注册。 信号注册实际上是一个位图和一个sigqueue队列。 4.1非可靠信号的注册 当进程收到非可靠信号时 将非可靠信号对应的比特位置为1添加sigqueue节点到sigqueue队列当中但是在添加sigqueue节点的时候队列当中已然有了该信号的sigqueue节点则不添加 4.2可靠信号的注册 当进程所受到可靠信号时 在sig位图中更改信号对应的比特位为1 不论之前sigqueue队列中是否存在该信号的sigqueue节点都再次添加sigqueue节点到sigqueue队列当中去 5.信号的注销 5.1非可靠信号的注销 信号对应的比特位从1置为0 将该信号的sigqueue节点从sigqueue队列当中进行出队操作 5.2可靠信号的注销 将该信号的sigqueue节点从sigqueue队列当中进行出队操作 需要判断sigqueue队列当中是否还有相同的sigqueue节点 ①没有了信号比特位从1置为0 ②还有不会更改sig位图中的比特位 6.信号阻塞 6.1信号是怎样阻塞的 信号的阻塞并不会干扰信号的注册。信号能注册但不能被立即处理 将block位图中对应的信号比特位置为1表示阻塞该信号 进程收到该信号还是一如既往的注册 当进程进入到内核空间准备返回用户空间的时候调用do_signal函数就不会立即去处理该信号了 当该信号不被阻塞后就可以进行处理了 6.2sigprocmask 函数原型int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 参数解释 how该做什么样的操作 SIG_BLOCK设置信号为阻塞 SIG_UNBLOCK解除信号阻塞 SIG_SETMASK替换阻塞位图 set用来设置阻塞位图 SIG_BLOCK设置某个信号为阻塞blocknew blockold | set SIG_UNBLOCK解除某个信号阻塞blocknew blockold ~set SIG_SETMASK替换阻塞位图blocknew set oldset原来的阻塞位图例下述例子信号全部被阻塞采用kill -9将该进程结束掉 #include stdio.h #include signal.h #include unistd.hvoid signcallback(int signumber) {printf(change the signal %d\n,signumber); }int main() {sigset_t set;sigset_t oldset;sigfillset(set);//所有比特位全置为1则信号全部会被阻塞sigprocmask(SIG_BLOCK,set,oldset);while(1){sleep(1);}return 0; } 结果 此时发送信号是不会有作用的采用kill -9强杀掉 7.信号未决 7.1 未决概念 实际执行信号的处理动作称为信号递达Delivery信号从产生到递达之间的状态称为信号未决Pending。 进程可以选择阻塞Block某个信号。被阻塞的信号产生时将保持在未决状态直到进程解除对此信号的阻塞才执行递达的动作。注意阻塞和忽略是不同的只要信号被阻塞就不会递达而忽略是、在递达之后可选的一种处理动作。 7.2 sigpending 函数原型int sigpending(sigset_t *set); 读取当前进程的未决信号集通过set参数传出。调用成功返回0出错返回-1. 例 #include stdio.h #include unistd.h #include signal.hvoid signalcallback(int signumber) {printf(chang signumber %d\n,signumber); } void printsigset(sigset_t *set) {int i 0;for(;i 32;i){if(sigismember(set,i)){putchar(1);}else{putchar(0);}} }int main() {signal(2,signalcallback);signal(10,signalcallback);sigset_t set;sigset_t oldset;sigset_t pending;sigfillset(set);//所有比特位全部置为1则信号会全部被阻塞sigprocmask(SIG_BLOCK,set,oldset);while(1){sigpending(pending);printsigset(pending);sleep(1);}return 0; } 结果 8.信号的处理方式 每个信号都有两个标志位分别表示阻塞和未决还有一个函数指针表示处理动作。在上述例子中 SIGHUP信号未阻塞也未产生过当它递达时执行默认处理动作。SIGINT信号产生过但正在被阻塞所以暂时不能递达。虽然它的处理动作是忽略但在没有解除阻塞之前不能忽略这个信号因为进程仍有机会改变处理动作之后再解除阻塞。SIGQUIT信号未产生过一旦产生SIGQUIT信号将被阻塞它的处理动作是用户自定义函数sighandler。 8.1signal函数 该函数可以更改信号的处理动作。 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 参数解释signum更改的信号值 handler函数指针要更改的动作是什么实际上该函数内部也调用了sigaction函数。 8.2sigaction函数 读取和修改与指定信号相关联的处理动作。 int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);参数解释 signum待更改的信号值struct sigaction结构体 void (*sa_handler)(int);//函数指针保存了内核对信号的处理方式 void (*sa_sigaction)(int, siginfo_t *, void *);// sigset_t sa_mask;//保存的是当进程在处理信号的时候收到的信号 int sa_flags;//SA_SIGINFOOS在处理信号的时候调用的就是sa_sigaction函数指针当中 //保存的值0在处理信号的时候调用sa_handler保存的函数 void (*sa_restorer)(void); 例 #include stdio.h #include unistd.h #include signal.hvoid signcallback(int signumber) {printf(change signumber %d\n,signumber); }int main() {struct sigaction act;//act为入参sigemptyset(act.sa_mask);act.sa_flags 0;act.sa_handler signcallback;struct sigaction oldact;//oldact为出参sigaction(3,act,oldact);while(1){sleep(1);}return 0; }结果 8.3 自定义信号处理的流程 task_struct结构体中有一个struct sighand_struct结构体。struct sighand_struct结构体有一个**struct k_sigaction action[_NSIG]**结构体数组。该数组中其中的**_sighandler_t sa_handler**保存的是信号的处理方式通过改变其指向可以实现我们对自定义信号的处理。 9.信号的捕捉 9.1信号捕捉的条件 如果信号的处理动作是用户自定义函数在信号递达时就调用这个函数这就称为信号捕捉。 9.2信号捕捉流程 内核态返回用户态会调用do_signal函数两种情况 无信号sys_return函数返回用户态 有信号先处理信号信号返回再调用do_signal函数 例 程序注册了SIGQUIT信号的处理函数sighandler。 当前正在执行main函数这时发生中断或异常切换到内核态。 在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。 内核决定返回用户态后不是恢复main函数的上下文继续执行而是执行sighandler函数 sighandler和main函数使用不同的堆栈空间它们之间不存在调用和被调用的关系是两个独立的控制流程。 sighandler函数返回后自动执行特殊的系统调用sigreturn再次进入内核态。 如果没有新的信号要递达这次再返回用户态就是恢复main函数的上下文继续执行了。 10.常用信号集操作函数 int sigemptyset(sigset_t *set);//将比特位图全置为0int sigfillset(sigset_t *set);//将比特位图全置为1int sigaddset(sigset_t *set, int signum);//将该set位图多少号信号置为1int sigdelset(sigset_t *set, int signum);//将该set位图多少号信号置为0int sigismember(const sigset_t *set, int signum);//信号signum是否是set位图中的信号11.SIGCHLD信号 该信号是子进程在结束是发送给父进程的信号但是该信号的处理方式是默认处理的。 父进程对子进程发送过来的SIGCHLD信号进行了忽略处理就会导致子进程成为僵尸进程。 可以自定义该信号的处理方式 #include stdio.h #include unistd.h #include signal.h #include string.h #include sys/wait.h #include stdlib.hvoid signcallback(int signumber) {printf(change signal %d\n,signumber);wait(NULL); }int main() {signal(17,signcallback);pid_t pid fork();if(pid 0){perror(fork);return -1;}else if(pid 0){printf(I am child\n);sleep(1);exit(12);}else{while(1){sleep(1);}}return 0; } 指令查看后台ps aux | grep ./fork 原文地址 https://blog.csdn.net/w903414/article/details/109802539?utm_sourceappapp_version4.18.0utm_sourceapp
http://www.w-s-a.com/news/287413/

相关文章:

  • 思途旅游网站建设系统用vscode做网站
  • 广州站改造最新消息半年工作总结ppt模板
  • logo模板下载网站推荐哪家网站开发培训好
  • 做外贸网站效果图页面关键词优化
  • 广平网站建设成都活动轨迹
  • 小型网站网站建设需要网络公司是什么行业
  • 滑动 手机网站 代码网页制作与设计讨论
  • 自己做网站处理图片用什么软件wordpress html5支持
  • 校园网站怎么建软文文案范文
  • 中国建设官方网站如何创建自己的软件
  • 来宾住房与城乡建设网站天津西青区怎么样
  • 西安网站建设培训班鄂州网页定制
  • 西部数码网站备份自己怎么做网站啊
  • h5网站开发用什么软件制作公司网站建设代理怎么做
  • 网站建设资料准备网上购物app有哪些
  • 沧州做网站优化哪家公司便宜国内百度云网站建设
  • 网站的最近浏览 怎么做龙岩市人才网最新招聘信息
  • 网站建设需要找工信部吗网站开发账务处理
  • 做那种的视频网站个体工商网站备案
  • 推广网官方推广网站中国建设招聘信息网站
  • 医院网站建设需要多少钱网络营销渠道可分为哪几种
  • 怎么取网页视频网站元素计算机专业论文网站开发
  • 上海网站建设备案号怎么恢复wordpress打开页面空白
  • 30个做设计的网站企业设计网站
  • 招生网站开发的背景创意 wordpress
  • 网站备案资料查询小型企业管理系统软件
  • 温州网站建设维护怎么做好网站开发、设计
  • 佛山 做网站公司有哪些网站排名忽然不见了
  • 广告网站建设最专业东莞大朗网站设计
  • 网站做流量的论坛贴吧分销商城系统源码