簡體   English   中英

如何在c ++中使用kill函數殺死進程?

[英]How to kill a process with kill function in c++?

我正在學習 Linux 中的進程。 我需要編寫一個操作進程的任務(創建、終止、更改細節和掛起)。 我已經編寫了該程序,但是 kill 和 suspend 不起作用。 為了解決這個問題,我以超級用戶身份啟動了該程序,但這對我沒有幫助。 我需要做什么來修復這個錯誤?

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
#include <unistd.h>
#include <sys/resource.h>
using namespace std;

int main(){
    float l,r;
    //  system("gnome-terminal -e 'sh -c \" /home/neo/Desktop/OSLab8/childprocess/a.out 1 2 3\"'");
    cout<<"Enter left and right side of the loop\n";
    cin>>l>>r;
    int n;
    cout<<"Enter number of processes\n";
    cin>>n;
    //   cout<<"Process 0";
    int currentPid;
    string cmd;
    double s = l;
    double step = (r-l)/n;
    cout<<"Father id "<<getpid()<<endl;
    int mode;
    cout<<"Enter 1 to time measure mode, 2 - demo mode\n";
    cin>>mode;
    for(int i=0;i<n;i++) // loop will run n times (n=5)
    {

        switch(currentPid = fork()){
            case 0:
                cmd = "gnome-terminal -e 'sh -c \" /home/neo/Desktop/OSLab8/childprocess/a.out "+to_string(s)+" "+to_string(s+step)+" "+((mode==1)?"":"1 ")+"\"'";
                system(cmd.c_str());
                return 0;
            case -1:
                printf("Error when forking\n");
                break;
            default:
                break;
        }
        cout<<"Son process id - "<<currentPid<<endl;
        s+=step;
    }
    if(mode==1){}
    else{
        int choise;
        do{
         cout<<"1 Set priority of processes "<<endl;
         cout<<"2 Kill processes "<<endl;
         cout<<"3 Suspend:"<<endl;
         cout<<"4 Exit";
         cout<<"Your command: ";
         cin>>choise;
         switch(choise)
         {
         case 1:
                {
                    cout << "Enter ID of the process: ";
                    int id; cin >> id;
                    cout << "Enter the priority (from -20 up to 19): ";
                    int prior; cin >> prior;
                    setpriority(PRIO_PROCESS,id,prior);
                    break;
                }
          case 2: 
                {
                    cout << "Enter ID of the process: ";
                    pid_t id; cin >> id;
                    kill(id,9);
                    break;
                }
          case 3: 
                {
                    cout << "Enter ID of the process: ";
                    int id; cin >> id;
                    kill(id,SIGSTOP);
                    break;
                }
          case 4: 
                {
                    cout << "Enter ID of the process: ";
                    int id; cin >> id;
                    kill(id,SIGCONT);
                    break;
                }
        }
        }while(choise!=4);
    }
}

我消除了不相關的“東西”並想出了這個:

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
#include <unistd.h>
#include <sys/resource.h>
#include <stdlib.h>
#include <string>

int main(int argc, char **argv) {

    if (argc != 2) { 
        std::cerr << "Usage: kil <process ID\n";
        return EXIT_FAILURE;
    }

    pid_t process = std::stoi(argv[1]);
    if (kill(process, 9)) {
        std::cerr << strerror(errno) << '\n';
        return EXIT_FAILURE;
    }
}

我做了一個快速測試,殺死了幾個進程,它似乎工作正常。 如果您想稍微終止進程......輕輕地,您可能需要使用kill(process, SIGINT)代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM