mithras
02-10-2002, 21:11
Hab spaßes halber mal ein Programm geschrieben, dabei soll der eine Prozess wenn der usr eine 1 eingegeben hat den anderen durch ein signal beenden!
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <ctype.h>
int fkt(pid_t pidnr);
int main(void)
{
int fd[2];
pid_t pid;
if (pipe(fd) < 0 )
puts("fehler bei pipe");
switch (pid=fork())
{
case -1:
{
puts("fehler fork!");
break;
}
case 0:
{// Kind
int e = 0;
while(1)
{
pid_t pidback;
sleep(2);
close(fd[1]);
read(fd[0], pidback , 100);
printf("\nPID2: %d\n", pidback);
puts("Um anderen Prozess zu killen bitte 1 eingeben!");
scanf("%d", &e);
if ( e == 1)
{
fkt(pidback);
sleep(1);
}
}
break;
}
default:
{//Eltern
pid_t pidrw;
pidrw = getpid();
puts("Ich werde ausgeführt!!");
puts("Und werde wenn die Fkt. ausgeführt wird gekillt!");
printf("\nPID1: %d\n", pidrw);
while(1)
{
close(fd[0]);
write(fd[1], pidrw, sizeof(pidrw));
puts("010101");
sleep(1);
}
break;
}
}
return 0;
}
int fkt(pid_t pidnr)
{
puts("Sende kill Signal!");
kill(pidnr, SIGINT);
//raise(SIGINT);
puts("gekillt!");
return 0;
}
Ich lasse die PID auslesen, dann wird die PIP via Pipe an anderen Prozess geschickt, dort wird die Fkt aufgerufen und schickt Signal an den PRozess.
Problem: Es scheint Probs mit
read(fd[0], pidback , 100);
zu geben, denn "PID2: %d\n", pidback"
"Um anderen Prozess zu killen bitte 1 eingeben!"
wird nicht angezeigt!
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <ctype.h>
int fkt(pid_t pidnr);
int main(void)
{
int fd[2];
pid_t pid;
if (pipe(fd) < 0 )
puts("fehler bei pipe");
switch (pid=fork())
{
case -1:
{
puts("fehler fork!");
break;
}
case 0:
{// Kind
int e = 0;
while(1)
{
pid_t pidback;
sleep(2);
close(fd[1]);
read(fd[0], pidback , 100);
printf("\nPID2: %d\n", pidback);
puts("Um anderen Prozess zu killen bitte 1 eingeben!");
scanf("%d", &e);
if ( e == 1)
{
fkt(pidback);
sleep(1);
}
}
break;
}
default:
{//Eltern
pid_t pidrw;
pidrw = getpid();
puts("Ich werde ausgeführt!!");
puts("Und werde wenn die Fkt. ausgeführt wird gekillt!");
printf("\nPID1: %d\n", pidrw);
while(1)
{
close(fd[0]);
write(fd[1], pidrw, sizeof(pidrw));
puts("010101");
sleep(1);
}
break;
}
}
return 0;
}
int fkt(pid_t pidnr)
{
puts("Sende kill Signal!");
kill(pidnr, SIGINT);
//raise(SIGINT);
puts("gekillt!");
return 0;
}
Ich lasse die PID auslesen, dann wird die PIP via Pipe an anderen Prozess geschickt, dort wird die Fkt aufgerufen und schickt Signal an den PRozess.
Problem: Es scheint Probs mit
read(fd[0], pidback , 100);
zu geben, denn "PID2: %d\n", pidback"
"Um anderen Prozess zu killen bitte 1 eingeben!"
wird nicht angezeigt!