Cum sa transmiti un semnal unui "copil"?
Last Updated: May 27 2015 00:03, Started by
worm94
, May 25 2015 19:07
·
0
#1
Posted 25 May 2015 - 19:07
Salut,
Incerc sa fac un programel care are 2 procese. "Tatal" atunci cand primeste de la tastatura caractrul s sa ii trimita copilului un semnal, de exemplu SIGQUIT iar acesta cand il detecteaza sa faca ceva anume. Am codul: #include"fiu.h" #include"hdr.h" #include<sys/wait.h> int main() { int pid,pid2,pidp,status; pid=fork(); pid2=getpid(); pidp=getppid(); if(pid==0) { if(signal(SIGQUIT,sig)==SIG_ERR) { err_sys("Eroare"); } waitpid(pidp, &status, WNOHANG|WUNTRACED); }else{ char c; c=getchar(); while(c != 's') { c=getchar(); } if(c == 's') { kill(pid2,SIGQUIT); } } return 0; } Insa nu prea merge...îmi ia tasta s însa nu cred ca, copilul mai primeste semnalul pentru că nu îmi execută funcția pentru semnalul SIGQUIT. Functia sig arată cam așa: void sig(int signal) { execl("/bin/ps","/bin/ps",NULL); } Are cineva vreo idee? |
#4
Posted 25 May 2015 - 21:58
#5
Posted 27 May 2015 - 00:03
Scuze nu am reusit sa mai raspund.El era corect doar ca am uitat sa-i adaug pauza.
El trecea prin fiu daca nu primea semnalul trecea mai departe, nu astepta pana sa il primeasca. Daca intereseaza pe cineva varianta functionala e aici : #include "hdr.h" #include "fiu.h" #include <signal.h> int main(void) { int pid; if ((pid = fork()) == 0) { if (signal(SIGQUIT, quitHandler) == SIG_ERR) err_sys("Eroare semnal"); pause(); } else { char c; while ((c = getc(stdin)) && (c != 'S' && c!= 's')); kill(pid, SIGQUIT); } return 0; } Poate mai ajuta pe cineva. TorchMan, on 25 mai 2015 - 21:22, said:
Nu e mai ok cu pipe-uri ? Cum ce ma ajuta in trimitera/primirea semnalului un pipe? |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users