Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2009, 19:48   #1
An123
 
Регистрация: 17.10.2009
Сообщений: 9
Смущение Управление процессами

Необходимо реализовать функцию запуска и параллельного выполнения нескольких программ. Задаётся количество выполняемых программ и набор их имён (пути к исполняемым образам). Исходный процесс завершается сразу после их порождения.
Написать тестовую программу для проверки работоспособности разработанной функции.

вот что получилось:
main.cpp
Код:
#include <iostream>
#include <vector>
#include <unistd.h>
#include <string>
#include <process.h>

using namespace std;

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

    cout << "Vvedite kollichestvo programm:"<<endl;
    unsigned n;
    cin>>n;
    std::vector <string> v;
    v.resize(n);
    if(n<=0) return 0;
    cout << "Vvedite imena programm:"<<endl;
    for (int i =0; i<n; ++i)
    {
        cin>>v[i];
    }

f(n,v);
cout<<"end"<<endl;
    return EXIT_SUCCESS;
}
proc.cpp
Код:
#include "process.h"
#include <cstdlib>
#include <string>
#include <vector>
#include <signal.h>
#include <sys/wait.h>
using namespace std;

Process::Process()
        : pid(0)
{
}
Process::Process(pid_t id)
        : pid(id)
{
}
bool Process::run(std::string a)
{
    if ( pid )
        return false;
    pid = fork();
    switch ( pid )
    {
    case -1:
        pid = 0;
        return false;
    case 0:
        pid = getpid();
        exit(action(a));
    }
    return true;
}

int Process::action(string a)
{
system(a.c_str());
return 0;
}

void f(int n, vector <string> v)
{
vector <Process> p(n);
for(int i=0; i<n;++i)
{
p[i].run(v[i]);
}
return;
}
proc.h
Код:
#ifndef PROCESS_H
#define PROCESS_H
#include<unistd.h>
#include<iostream>
#include <vector>
#include<string>
class Process
{
public:
    Process();
    ~Process() {}
    operator bool() const; 
    pid_t id() const;
    bool run(std::string a);
    
protected:
    int action(std::string a);
private:
    Process(pid_t id);
private:
    pid_t pid; 
};
inline Process::operator bool() const
{
    return pid != 0;
}
inline pid_t Process::id() const
{
    return pid;
}
void f(int n, std::vector <std::string> v);
#endif
здесь всё правильно реализовано?
И вот этот кусок взял из методички - вроде понимаю что здесь происходит - но препод придирается
Код:
Process::Process()
        : pid(0)
{
}
Process::Process(pid_t id)
        : pid(id)
{
}
bool Process::run(std::string a)
{
    if ( pid )
        return false;
    pid = fork();
    switch ( pid )
    {
    case -1:
        pid = 0;
        return false;
    case 0:
        pid = getpid();
        exit(action(a));
    }
    return true;
}

int Process::action(string a)
{
system(a.c_str());
return 0;
}
напишите пожлста, что здесь происходит - если можно поподробнее
An123 вне форума Ответить с цитированием
Старый 18.12.2009, 19:52   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот этот кусок
Код:
    switch ( pid )
    {
    case -1:
        pid = 0;
        return false;
    case 0:
        pid = getpid();
        exit(action(a));
    }
    return true;
}
Я. конечно, могу ошибаться (в С не особо силен) но:
Код:
    switch ( pid )
    {
    case -1:
        pid = 0;
        return false;
    case 0:
        pid = getpid();
        return true;
        exit(action(a));
    }
}
мне кажется правильнее...
mihali4 вне форума Ответить с цитированием
Старый 18.12.2009, 23:14   #3
An123
 
Регистрация: 17.10.2009
Сообщений: 9
По умолчанию

а здесь выполняется условие - исходный процесс завершается сразу после их порождения. В этом куске что происходит с переменными состояния, pid и id?
An123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
управление процессами An123 Общие вопросы C/C++ 5 29.11.2009 14:46
убить процесс по его идентификатору - Работа с процессами ACE Valery Общие вопросы C/C++ 8 04.06.2009 21:51
Управление фокусом JOHNKZ1 Общие вопросы Delphi 9 17.04.2009 17:03
Управление голосом prizrak1390 Общие вопросы Delphi 2 24.06.2008 21:04