2012-09-28 4 views
-1

Я работаю над назначением, которое требует от меня создания дочернего процесса, а затем ждать 300 секунд и убить этот процесс, в то время как родительский процесс должен быть убит через 200 секунд после создания дочернего процесса. Я делаю это на C++ в Ubuntu, используя компилятор Clang ++. Я очень новичок в C++ и некоторое время использую Java. То, что у меня сейчас, скорее всего, похоже на psuedocode, чем что-либо еще, я действительно сомневаюсь, что это работает. Когда я компилирую, он дает мне ошибки в отношении вызовов kill(), я пробовал такие вещи, как * this.kill() или this.kill(), и ни один из них не работал. Как использовать команду kill? Кроме того, выглядит ли этот код так, как он будет делать то, что я хочу? Боюсь, что это даже не близко.Создание процесса и его убийство

#include <iostream> 
#include <unistd.h> 
using namespace std; 

class process{ 

public: 
    process(){ 
     main(); 
    } 


    void main(){ 
     process *parent = new process(); 
     int pid; 
     pid=fork(); 
     if (pid == 0) 
     { 
      sleep(200); 
      kill(); 
     } 
     else 
     { 
      sleep(100); 
      kill(); 
     } 
    } 
}; 
+0

Пожалуйста, не используйте устаревшую домашнюю метку. – chris

+0

Начните с [документации] (http://pubs.opengroup.org/onlinepubs/009604599/functions/kill.html). –

ответ

0

kill системный вызов требует несколько аргументов: идентификатор процесса в для процесса, чтобы убить, и определенный сигнал. Нет версии вызова без аргументов, например. просто убейте текущий процесс.

См. Страницу руководства для kill, here's Линейная версия страницы руководства.

Обратите внимание, что Frim unistd.h вы также имеете доступ к getpid вызова, который вы можете использовать, чтобы получить идентификатор процесса для вызывающего процесса, см man getpid.

0

kill является системным вызовом для отправки сигналов процессов, необходимо указать правильный сигнал в качестве второго параметра (первого идентификатор процесса процесса принимающего), например, так:

kill(pid,SIGKILL); 
1

Вашего код структурированный как программа командной строки Java, где основной точкой входа является функция с именем main() внутри некоторого (неспецифического) класса. Программа C++ использует main() как точку входа, однако она должна быть функцией на верхнем уровне, а не методом класса.

Обычно вы бы иметь в качестве минимального C++ программа:

int main(int argc, char *argv[]) 
{ 
    ... 
    return 0; 
} 

В программе было бы лучше, чтобы избежать класса полностью; это не обязательно, учитывая, что вы используете только простой процедурный код.

Смежные вопросы