From fb267c3d929ed268545c8082114ff6ffc357e3dc Mon Sep 17 00:00:00 2001 From: xgiovio Date: Sun, 23 Mar 2014 17:38:14 +0100 Subject: [PATCH] Creato programma waitc in cui il parent crea un figlio. Quest'ultimo riceve un numero da terminale e subito manda un sigusr1 al padre. Il parent attende un usr1 o un sigchld e poi termina. --- 6.process_and_signal/file_communication.c | 72 ++++++++++++++++++++++ 6.process_and_signal/waitc | Bin 0 -> 9017 bytes 6.process_and_signal/waitc.c | 72 ++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 6.process_and_signal/file_communication.c create mode 100755 6.process_and_signal/waitc create mode 100644 6.process_and_signal/waitc.c diff --git a/6.process_and_signal/file_communication.c b/6.process_and_signal/file_communication.c new file mode 100644 index 0000000..3ab6823 --- /dev/null +++ b/6.process_and_signal/file_communication.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void sigusr1action (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGUSR1\n"); + +} + +void sigchldaction (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGCHLD\n"); + + +} + + +int main (int index, char** in_data){ + + int duplicate; + duplicate = fork(); + if (duplicate < 0) + exit(-1); + if (duplicate == 0){ + //child + + int numero; + fscanf(stdin,"%d",&numero); + kill (getppid(),SIGUSR1); + fprintf(stdout,"Child:Process %d terminated\n",getpid()); + + }else{ + // parent + + struct sigaction sigusr1structure; + sigusr1structure.sa_handler = sigusr1action; + sigusr1structure.sa_flags = 0; + + + struct sigaction sigchldstructure; + sigchldstructure.sa_handler = sigchldaction; + sigchldstructure.sa_flags = 0; + + + sigaction (SIGUSR1, &sigusr1structure, NULL); + sigaction (SIGCHLD, &sigchldstructure, NULL); + + int status; + int pid; + + for (pid = waitpid(-1,&status,0);pid > 0;pid = waitpid(-1,&status,0)){ + fprintf(stdout,"Parent:Child %d terminated\n",pid); + } + + fprintf(stdout,"Parent:Process %d terminated\n",getpid()); + } + + + + + return 0; +} + diff --git a/6.process_and_signal/waitc b/6.process_and_signal/waitc new file mode 100755 index 0000000000000000000000000000000000000000..231ba34e14d440202b287d8bee5a97653e1343f1 GIT binary patch literal 9017 zcmeHMeQaCR6+gD~;ihepegNqQ)B|@4)nb~K2Dg0drAgYCV%m@zK$GOb#ugh*DM1Haq9Od+hgK z?0x((X@Bfme&?RwJ?EZt&%5`$_wIeLEwIh$Z~zx4+yKNWm5P9jE5P^?!Ai^z3qXO( zU=>s#QjUK`v=B9FOwY=$nYyK%3uzht{Z0e$I~7r3y4rw&DSJqi>=lY4s|I~~k-;(r z@CbnP$k+O6!6NMu6{d>xBPuED5lea2(GSOj++{)FVIt-NJr$N_(Z^GA+l)RI+eYJl5NE^;Pk3 zLp+wq3^fe-n;M#~_N9})4PxB2=m^Pf-`Oo(;yBhJM?NpdKg|JZe|pl{Jo?+G!pkzJ zKf37r@l(fs7(Y((i}6o=7~}H5u%lLBbStjB^s&|b-9a)_w6r0*v`EVxCGd46@VzDQ zLuKnpg*Dy#=>wt-`b*W@LiLy zZSZYEpIzXTKgib#2+boW&}88Wb4e_Q)5`^qNG!85wtzIBK%UA>O^={7_sr{x<3%}$ z<|h}97vVBh7)>&cmB`WD;NmvnGDV1{S`$v|gG-$W=QU4l9uscPi}fa)Y;##}!ug(4 zo8N?EAo4{q;Z=DQKsDhqRf*OP6E0J+z}1nH?%dZ{%{_`?$gRaOs3X5~PtI++dw~b$ z*2eK#vqr%h@ln#5oteY3wwHJc-RwJpzm0eb+3bYiJBg=I%|0*q9mG?JW)BH|EAbSX z*>S;dA)apO?6BZB5KkeR9TfaJ;@!me2>x>7DI~KUf?r8Ig<@7gzVXxc?7MfV*$>r` zk4|-TwNFiqS1F)Q9RWe64!9M_eFp_kkB?If)Y0;o+XL$U3EesOjtIfHxpb@9k9U*c z@bxn&2bmjRQSgz2YR5_Kp%Z@Mj(qJ>M@~4@&C_XbU(K3Uz+g@|)NJ_+C^WbHO(8T| z{&P~L7Es-#OXW*XOHQ^Dqv9^sZMb&<@$vmmU@n`sTj#brlWG&D=RT zK2B}uQf>BubLhtw>NNYt;gdAL?7J^hMt_a&kD8szy>(%3?%1SNVS!XAUsy!p>4L&T zCws7)?5ocqq-I|@gd{hHmu%a)kq6GfzN*(L{<+%_B0h8LOP5iPqvg+6dO#iPKCNco zMjyl&a=$r`qH9p}HM&*k*%t)7hL`LcFMY$%8zeoG&IGp3en2Cc+W$PNdhy;(?f0Wm z#0aDb&`n_5v_Qs$*vq1xJ^DIX%H4>asAEDj-$3t9xecPB?Q|Zc(HPG5lUr?PPh9`f z4Tfj$;Vl{MK5KUFiqh)!hWf|@XW_wDbH~q#G2UkM^cePJ?&f`L6-JNYjm4s7@IDW@a4aKd=kyh?&}*BV_b1%Ajz)1koSn;j zE@!y0)^fih-zdu%`M)EWiX`+cov~14Z$?jgcDHZu-rd<)1w|TK)Ie($tPMj;G!_qU z=}09*k#yR#Htf+OsexD`s7JziMIlq7t%RmymFrr1hoeN~{(5e157Ot*-C?AEL3#*j zHQv_=q>tcSoIzTL6UI#|4GXbe~@ z3-5Ig!?#ynyKbZRa?&FiOdH@uTl8)M&DFIBoGpth;@AtFrhn2-8Dtx_XUHek zcMUqI2lC^m_&-E*6Di#MSowhpty&qW{I2tH*I1czPc_-0ar_?tZXBceIf&5z%l}XW zC|OZqmkh4JGcKoR{ymG|0iqR(5Lqk*r}61Q<;x3mNumdx3X%M`U45Cs)B2z?;Z*Pn zKslDmGX?>E_o$QnMUpb%cc@%VkAQfN+1C-h08qKaAkb5;h#KQ{lBYRKMKuV12OEX$ z<1`lI$w~h)PJ-vSoRa)e*)G-p>x92o?S_6J@5|35eNob*lD;SD-z7aGX+@ zZ%W!Esol=@mXOt^DqFP@nI1tgIVbo;~d?7uV zN~1x8+#SM3>@zqJ3!%Xzc7qq6=-cS0H;vMvUa>zssp0SJ=n!2(EA`D^x{|o+V~|-Khv%mmPWqSGd^qTe0a3t`WA+ zdEuZ0>ZNMAq`V%v$DLTAoWS}MP6av2AA%TP5?H0YLSturUca{>MmdA^IS+4H zh$!~>-GwNvdDiE3epKpTCiU2VmScJkwo?vap7Tgf>aUmjcK;;|_hE%ZS)cP(oixaK zi|yOT|FBJ;^I(ru;JisJ<#xONd9DDMy2<7L;Mvgy;8C>6g9+`rO)8)eP*=_{0qD)sI5?ED{4mZl2(&(A&HzvX>e zo}aAGe!Y*nX8XJkG*g2OSXkcR3OwU~#RjuJzjx%M{vaz#%6d#cvFY!T`zd>*gX|}F z!+Ol0!U|zL{z0i9m5Lq~l+@nemxz=9>uqwZzs`n}EET5osmr!SgSP`fS*HFyb}2NV#VFS&kZZS0Qh-e#jEn~yHmSNuM zF+);*Ip&jM_(gcmQw+a2zaMPw%!OYIyuPh?9q_uf;)VToE56dqin_557DHSDi;y~-wQ6vt2fzOXa8{$s9kK;DGw+s0dFf8*4ubaCi{)ohRJr2o! zz^!1dP)hm#Fp7}>>uvG>p1_yD!9_};6RiDM;Pd_e1>)rYp(+Jyg>nR|#o~5Mh%5!K z&F*o;9WZ}B{H=ui86iJ^J}kmOEv0x$e>nZDM!eYh%X-8;Fn|7BEBX<}EtgwL-~)&k zJI5I=A^#-ewK%V$@;fF9zDqrP3&_09zyu@_uC{z5{WJ&$!L*E-7!% zd$&k=dpvukJe>^iz1pX(1&(HrK zl#qu|FdjD@5ke@Xr}Ye;G=%UJucd2Orxs}6-GwKIn$~LJcC?t9!bz<^p6m_AHSzhZ z1v5i{pT>jn2=2G~nl^201ZvP?;UVHSg7F0&&I}CfV>@j-TZNfzoy|A3Y0Qxst{1F` zZ*^gXjvhn8S^DDFf~iz+pB71kL2JErXY)<%E!e%OMVy0zwmqiqTp$$? literal 0 HcmV?d00001 diff --git a/6.process_and_signal/waitc.c b/6.process_and_signal/waitc.c new file mode 100644 index 0000000..3ab6823 --- /dev/null +++ b/6.process_and_signal/waitc.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void sigusr1action (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGUSR1\n"); + +} + +void sigchldaction (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGCHLD\n"); + + +} + + +int main (int index, char** in_data){ + + int duplicate; + duplicate = fork(); + if (duplicate < 0) + exit(-1); + if (duplicate == 0){ + //child + + int numero; + fscanf(stdin,"%d",&numero); + kill (getppid(),SIGUSR1); + fprintf(stdout,"Child:Process %d terminated\n",getpid()); + + }else{ + // parent + + struct sigaction sigusr1structure; + sigusr1structure.sa_handler = sigusr1action; + sigusr1structure.sa_flags = 0; + + + struct sigaction sigchldstructure; + sigchldstructure.sa_handler = sigchldaction; + sigchldstructure.sa_flags = 0; + + + sigaction (SIGUSR1, &sigusr1structure, NULL); + sigaction (SIGCHLD, &sigchldstructure, NULL); + + int status; + int pid; + + for (pid = waitpid(-1,&status,0);pid > 0;pid = waitpid(-1,&status,0)){ + fprintf(stdout,"Parent:Child %d terminated\n",pid); + } + + fprintf(stdout,"Parent:Process %d terminated\n",getpid()); + } + + + + + return 0; +} +