我正在尝试在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()函数有错误。我把它拿出去试了,但没有发生任何事情。
答案 0 :(得分:2)
你必须写:
execlp("/usr/bin/firefox","firefox",NULL);
你还需要在execlp之后放一个_exit,以防它失败。
答案 1 :(得分:2)
我认为您没有正确调用execlp
。
它不会将"firefox"
追加到"usr/bin"
。因为它会搜索PATH
环境变量,所以您可以使用execlp("firefox","firefox",NULL)
调用它。
旁白:是的,exec
系列函数允许您打破argv[0]
应该命名可执行文件的名义保证。对不起,就是这样。
答案 2 :(得分:0)
要创建进程,可以使用系统调用,fork调用,execl调用。 要了解如何使用这些调用在linux中创建进程请按照以下链接。 我认为这将有助于您通过示例更多地了解流程创建。 http://www.firmcodes.com/process-in-linux/