Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Cum sa transmiti un semnal unui "copil"?

- - - - -
  • Please log in to reply
4 replies to this topic

#1
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
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?

#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
ai incercat sa te adresezi copilului?

#3
TorchMan

TorchMan

    Junior Member

  • Grup: Members
  • Posts: 226
  • Înscris: 21.10.2012
Nu e mai ok cu pipe-uri ?

#4
TorchMan

TorchMan

    Junior Member

  • Grup: Members
  • Posts: 226
  • Înscris: 21.10.2012

View PostTorchMan, on 25 mai 2015 - 21:22, said:

Nu e mai ok cu pipe-uri ?

EDIT: Ai inclus fișierele care trebuie? Am dat copy-paste la codul tău și face ce trebuie. (Cu mențiunea că am pus funcția sig în același cpp cu main-ul).

#5
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
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. :)

View PostTorchMan, on 25 mai 2015 - 21:22, said:

Nu e mai ok cu pipe-uri ?
Ce sa fie mai usor cu pipe?
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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate