0

我正在尝试在 linux 中创建一个进程,但是我不断收到错误消息。在我的 c++ 代码中,我只想打开 firefox.exe。这是我的代码:

//header files
#include <sys/types.h> 
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

//main function used to run program
int main()
{
    //declaration of a process id variable
    pid_t pid;

    //fork a child process is assigned 
    //to the process id
    pid=fork();

    //code to show that the fork failed
    //if the process id is less than 0
    if(pid<0)
    {
        fprintf(stderr, "Fork Failed");// error occurred
        exit(-1); //exit
    }

    //code that runs if the process id equals 0
    //(a successful for was assigned
    else if(pid==0)
    {
        //this statement creates a specified child process
        execlp("usr/bin","firefox",NULL);//child process
    }

    //code that exits only once a child 
    //process has been completed
    else
    {
        wait(NULL);//parent will wait for the child process to complete
        cout << pid << endl;

        printf("Child Complete");
        exit(0);
    }
}

wait() 函数存在错误。我把它排除在外并尝试了,但什么也没发生。

4

3 回答 3

2

你必须写:

execlp("/usr/bin/firefox","firefox",NULL);

您还需要在 execlp 之后放置一个 _exit 以防它失败。

于 2012-10-11T03:47:09.933 回答
2

我认为您没有execlp正确调用。

它不会附加"firefox""usr/bin". 因为它会搜索PATH环境变量,你可以用execlp("firefox","firefox",NULL).


旁白:是的,函数族允许您打破应该命名可执行文件exec的名义保证。argv[0]抱歉,事情就是这样。

于 2012-10-11T03:50:03.910 回答
0

要创建一个进程,您可以使用系统调用、fork 调用、execl 调用。要了解如何使用这些调用在 linux 中创建进程,请点击以下链接。我认为它将通过示例帮助您更多地了解流程创建。 http://www.firmcodes.com/process-in-linux/

于 2015-12-01T16:18:59.800 回答