我有一个C程序。我注意到您不能在其中放入2个execl。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t fork(void);
int system(const char *command);
execl("/bin/sh", "sh", "-c", "kdialog --warningcontinuecancel
\"Make sure to include: \n \n 1. py_lcd folder \n 2. 4x20
Raspberry Pi LCD Display \n 3. Python 2.7.12 to be installed \n
\n If you are missing something, kill the program process and
get them.\"", (char *) 0);
sleep(1);
execl("/bin/sh", "sh", "-c", "kdialog --msgbox \"Setting up files...\" --title \"Installing...\"", (char *) 0);
return(0);
}
有人可以帮助我,如果有一种方法可以绕过这个问题,或者我犯了一个错误?
答案 0 :(得分:3)
exec
函数家族在成功时不会返回。他们用运行exec
的程序来替换正在运行的程序。如果要在子进程中运行程序(完全控制,与system
不同),则需要使用fork
+ exec
+ wait
(或者也许使用{{ 1}})。
答案 1 :(得分:1)
在execl之后写的任何东西都是死代码。 execl的主要目的是将当前过程信息重新用于新过程以提高性能。您将共享与执行execl的当前进程相同的进程信息结构(pid,堆栈,堆等)。
答案 2 :(得分:0)
我自己找到了答案。有一个system()命令的工作原理完全相同,但是您可以将其插入代码中的任何位置而不会出现问题