how to suspend/restart processes in C (linux)

16,283

Solution 1

kill will not just 'kill' the process whose ID you gave it. It sends the signal you give it.

Solution 2

Send a process SIGSTOP to pause it and SIGCONT to resume it.

These signals are used to implement shell job control and because of that they can't be caught, blocked or ignored (otherwise an application could defy job control).

Share:
16,283
vallllll
Author by

vallllll

android developer and IT student

Updated on June 04, 2022

Comments

  • vallllll
    vallllll almost 2 years

    Hi I have to write 2 fonctions for system calls that will manage the execution of task in an operating system. I couldn't find a way to suspend/restart processes. I have found a list of signals and I know the kill function and here is my 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;
    }
    

    remark: this code is not supposed to really work it's just a little simulation thanks a lot in advance