linux进程 ppt,实验_linux进程管理-进程通信.ppt

实验_linux进程管理-进程通信.ppt

d2e2d4c02f095e34b1fe2fbca2304f5b.gif

还剩

15页未读,

继续阅读

下载文档到电脑,马上远离加班熬夜!

亲,很抱歉,此页已超出免费预览范围啦!

如果喜欢就下载吧,价低环保!

内容要点:

16上机练习 -软中断 3编写程序完成:(1) 父进程生成两个子进程 P1, P2(2) 父进程从键盘接收 DELETE中断信号(3) 然后父进程使用系统调用向两个子进程分别发送中止执行信号 SIGUSR1和 SIGUSR2(4) 子进程收到各自的信号后分别输出child 1 killed by father processchild 2 killed by father process,并退出(无次序要求)(5) 父进程在收到子进程撤消的消息后输出father kill itself. 父进程最终退出。15上机练习-软中断 2使用软中断实现父子进程同步,父进程先输出 A,然后子进程输出 B。14printf("OK!\n"); //输出结束信息exit(0);}else //子进程返回{ signal(12,int_fun1); //预置软中断信号k1=1;while(k1==1) /*循环显示并等待父进程发软中断信号 */{ printf(" I'm child\n ");sleep(1);}printf(" Child exited!\n "); //子进程结束信息exit(0); //子进程终止}}13#includeint k1; //定义全局变量 k1void int_fun1(int sig) //定义软中断处理函数{ k1=0; }main(){ int k,p1;while((p1=fork())==-1); //创建子进程if(p1>0) //父进程返回{ for(k=1;k<4;k++) //显示 3行信息{ printf("How are you !\n");sleep(1);}kill(p1,12); //发软中断信号给子进程wait(0); //等子进程终止12[例 ] 父子进程同步要求如下:父进程创建一个子进程 , 在父进程中显示 3行 "Howare you ! "然后发软中断信号给子进程 , 再等待子进程终止后输出结束信息 "OK! ", 然后终止执行 。子进程中循环显示 "I'm child" , 当接收到父进程发来的软信号后停止循环 , 显示 "Child exited! "并终止执行 。它们之间的同步关系是:子进程在循环显示中等待父进程发出的软中断信号 , 并输出结束信息 , 然后结束;父进程等待子进程结束后输出结束信息 , 然后结束 。11实现 父 → 子 → 父 同步的步骤如下:⑴子进程使用 signal()预置软中断处理函数,然后等待父进程发软中断信号;⑵父进程中使用 kill()发软中断信号给子进程,再用wait(0)等待子进程结束;⑶子进程接收到软中断信号后转去执行中断处理函数⑷子进程在中断处理返回后,使用 exit(0)终止执行,向父进程发终止信息。⑸父进程使用 wait(0)接收到子进程的终止信息后结束等待,并终止自己的程序的执行。10在进程同步中,使用 exit()和 wait()实现了父进程等子进程终止的同步,但是这种同步方法不能实现子进程对父进程的等待。要实现子进程对父进程的等待可以使用 父进程向子进程发软中断信号 ,子进程接收信号的方式实现。这两种同步方式相结合,可以实现 父 → 子 → 父 的同步序列。9上机练习-软中断 1编写一个程序循环输出“ how are you?” ,当键盘输入 Ctrl+C时终止,当输出次数不超过 350次时在此过程中使用 Ctrl+C不能中断显示, 350次后才能用Ctrl+C中断显示,然后输出“

发表评论

暂无评论,赶快抢占沙发吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值