Προς το περιεχόμενο

Χειρισμός σημάτων μεταξύ γονέα παιδιού C


pagratios

Προτεινόμενες αναρτήσεις

Ο πατέρας δημιουργεί με fork ένα παιδί για να κάνει exec αλλά όταν θα έρθει το SIGINT θα τερματίσει ο πατέρας. Πως μπορεί να το αγνοήσει ο πατέρας αλλά όχι το παιδί ?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα καλεσεις τη signal(SIGINT, siginthandlerFunc) ξεχωριστα στον κωδικα του παιδιου και του πατερα

pid_t pID = fork();
if (pID == 0)                // child
{
// Code only executed by child process
    signal(SIGINT, siginthandlerFunc);
}
else if (pID < 0)            // failed to fork
{
    exit(1);
}
else                                   // parent
{
// Code only executed by parent process
    signal(SIGINT, siginthandlerFunc2);
}
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Τελικά έβαλα τον πατέρα να το αγνοεί και το παιδί να καλεί την signal(SIGINT,SIG_DFL) και λειτούργησε.

 

Τώρα πήγα να ενσωματώσω αυτά μέσα σε ένα πρόγραμμα το οποίο καλώ την ptrace και δεν λειτουργούσε τίποτα.

 

edit:  Μήπως το θέμα είναι με την trace?

Επεξ/σία από pagratios
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

έκανα το εξής

 

childID = pid; //chilcID global
act.sa_handler= handler;
sigfillset (&( act.sa_mask ));
sigaction (SIGINT , &act , NULL ); 
sigaction (SIGHUP , &act , NULL ); 
sigaction (SIGTERM , &act , NULL ); 

στον πατέρα και η συνάρτηση είναι η

 

void handler(int signo)
{
	//printf("pid = %u\n",childID);
	kill(childID,signo);
}

αλλά το παιδί δεν καταλαβαίνει τίποτα.

 

Και αν αντί για signo βάλω SIGKILL τότε τερματίζει αλλά ο πατέρας κολλάει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...