comment suspendre/relancer les processus en C (linux)
Bonjour je dois écrire 2 fonctions pour les appels-système qui permettra de gérer l'exécution de la tâche dans un système d'exploitation. Je ne pouvais pas trouver un moyen de suspendre/relancer les processus. J'ai trouvé une liste de signaux et je sais que la fonction kill et voici mon code:
#include <stdlib.h>
#include <signal.h>
typedef struct File
{
int pid;
struct File *pids;
} *file;
file file1 = NULL;
//this fonction is to suspend a process using its pid number
int V(int pid_num)
{
//does the kill fonction just kill the process or will it take into account the signal argument?
kill(pid_num, SIGSTOP);
file1 = ajouter(file1, pid_num);
return 0;
}
//this is to restart the process
int C()
{
if (file1 != NULL)
{
//I know the kill fonction is not the right one but I just don't know any other to take as argument the pid of a process to restart it
kill(file1->pid, SIGCONT);
}
return 0;
}
//this fontion adds pid number to our structure
file ajouter(file file_n, int pid)
{
file nouveau = malloc(sizeof(file));
nouveau->pid = pid;
nouveau->pids = file_n;
return nouveau;
}
remarque: ce code n'est pas vraiment censé travailler, c'est juste un peu de simulation
merci beaucoup à l'avance
Pourquoi utilisez-vous un mondial
file1
et la donner en paramètre à ajouter
? c'est inutile, le choix entre mondial ou pas, mais ne se mélangent pas. Aussi, préférez next
au lieu de pids
que c'est une liste chaînéeOriginalL'auteur vallllll | 2012-02-15
Vous devez vous connecter pour publier un commentaire.
kill
ne sera pas seulement de "tuer" le processus dont l'ID que vous avez donné. Il envoie le signal que vous lui donnez.OriginalL'auteur Eregrith
Envoyez un processus
SIGSTOP
pour le mettre en pause etSIGCONT
la reprendre.Ces signaux sont utilisés pour mettre en œuvre shell contrôle du travail et en raison de qu'ils ne peuvent pas être pris, bloqué ou ignorées (autrement, une demande pourrait défier le contrôle du travail).
OriginalL'auteur Maxim Egorushkin