как приостановить / перезапустить процессы в C (Linux) - PullRequest
3 голосов
/ 15 февраля 2012

Привет! Мне нужно написать 2 функции для системных вызовов, которые будут управлять выполнением задачи в операционной системе.Я не мог найти способ приостановить / перезапустить процессы.Я нашел список сигналов и знаю функцию kill, и вот мой код:

#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;
}

примечание: этот код не должен работать, это всего лишь небольшая симуляция, большое спасибо заранее

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Отправьте процесс SIGSTOP, чтобы приостановить его, и SIGCONT, чтобы возобновить его.

Эти сигналы используются для реализации управления заданиями оболочки и поэтому не могут быть перехвачены, заблокированы или проигнорированы (в противном случае приложение может игнорировать управление заданиями).

1 голос
/ 15 февраля 2012

kill не просто «убьет» процесс, чей ID вы ему дали. Он посылает сигнал, который вы даете ему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...