0

I am working on a code which has several processes forked(). (linux - KDevelop)

The processes after they were created runs paralell in the background.
I want to read on a command line (like cinn >> kill=1 ) which tells the main process to kill all the childs and the main p., but I dont exactly know which process reads the input on the console.

How works the consol after forking. Which process reads the data from it?

Thanks for any suggestion.

3
Contributors
4
Replies
5
Views
9 Years
Discussion Span
Last Post by slacke
0

Which process reads the data from it?

All of them. :) Each process gets a handle to stdin and the computer makes sure that they all get a chance to read from it, but only one at a time.

0

The code is something like this...

int kill=0;
int proces1;
int proces2;

	void child2()
	{
		for(int b=0; b<100; b++)
		{
			sleep(2);
			cout << "2" << endl;
			if(kill==1)
			{
				cout << "killing child 1..." << endl;
				proces2=0;
				return;
			}
		}
	}
	void child1()
	{
		for(int a=0; a<100; a++)
		{
			sleep(3);
			cout << "1" << endl;
			if(kill==1)
			{
				cout << "killing child 2..." << endl;
				proces1=0;
				return;
			}
		}
	}


int main(int argc, char *argv[])
{


	int pid1, pid2;
	proces1 = 1;
	proces2 = 1;
	
	pid1 = fork();
	if(pid1 == 0)
	{
		child1();
	}
	else
	{
		cout << "forked 1" << endl;
	}


	pid2 = fork();
	if(pid2==0)
	{
		child2();
	}
	else
	{
		cout << "forked 2" << endl;
	}

	cout << "main runing" << endl;

	
	for(int clock=0; clock<100;clock++)
	{
		if(kill==0)
		{
			sleep(5);
			cout << "more processes needed, program runinig..." << endl;
			cin >> kill;
		}
		else
		{
			clock=200;
		}
	}
	
	cout << "killing signal received" << endl;

	sleep(10);		// just for sure 10 secs

	for(int ok=0; ok<1000; ok++)
	{
	if(proces1==0)
	{
		cout << "process 1 killed..." << endl;
		if(proces2==0)
		{
			cout << "process 2 killed..." << endl;
			ok = 1001;
		}
		else
		{
			cout << "zombie processes stil alive..." << endl; 
		}
	}
	}

  return EXIT_SUCCESS;
}

but i'v got a feeling that there is something wrong in basic with that code...

for example I never get the - killing child 1.... or killing child 2...

0

I was trying to pass state values like kill=1, which should tell to all child processes that they should execute their ending processes and tell to the main process if it was succesful.

But I cant just pass any value to childs. I was trying with global variables (kill, processStatus1) but it did not work. Than I try pointers with same result.

int kill;
int processStatus1;

int main()

 int child1, child2, child3 ...
 
 child1 = fork();... calls the refresh function for example...
 child2 = fork();... calls the virtualSpace function ...
 and so on...

 kill =1;

How can I make this interaction between child and main processes?

This article has been dead for over six months. Start a new discussion instead.
Please be thoughtful and detailed and be sure to adhere to our posting rules.