Почему эта функция execlp () не выполняется? - PullRequest
0 голосов
/ 26 октября 2019

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

Я пробовал execl () и execlp (), но не знаю, что написал неправильно.

 // create child procs that use execlp()
    for (int i = 0; i < num; i++){
        if ((pids[i] = fork()) < 0){
            perror("fork");
            abort();
        } else if (pids[i] == 0){
            // do child work here
            execlp("./fileWriter", "./fileWriter", num_threads, NULL);
            printf("got here in child proc\n");
            exit(0);
        }
}

I 'Я ожидаю, что он выполнит отдельный файл, и сейчас я только что написал оператор print, чтобы знать, когда этот другой файл действительно выполняется. Вместо этого я получаю сообщение «попал в дочерний процесс», который я добавил, чтобы я знал, когда дочерние процессы пропускаются по команде execlp ().

1 Ответ

0 голосов
/ 26 октября 2019

Похоже, вы в основном там, но я дам вам версию, которую я использую:

char cNum[20];
// create child procs that use execlp()
for (ii = 0; ii < num; ii++)
{
    sprintf(cNum,"%d", num_threads);
    if ((pids[ii] = fork()) < 0){
        perror("fork");
        abort();
    } else if (pids[ii] == 0){
        // do child work here
        ret=execlp("./fileWriter", "./fileWriter", cNum, (char *) NULL);
        printf("got here in child proc: %d\n",ret);
        perror("execlp");
        exit(0);
    }
}

execlp должен быть строкой (вы получили эту часть), и это "полезно"если вы изучите ошибку, посмотрите, откуда происходят ошибки.

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