exec()
function is a function used to create and run processes in operating systems Linux, Windows and MacOS. exec()
function has different useful variants like execve()
, execl()
, execlp()
, execle()
etc.
General Syntax
There are a lot of different exec()
function variants. Here are some of them syntax.
int execl(const char *path, const char *arg, (char *) NULL ); int execlp(const char *file, const char *arg, (char *) NULL ); int execle(const char *path, const char *arg, (char *) NULL, char * const envp[] ); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[],char *const envp[]);
Example C Code
During the exec()
function example we will use following C code for examples.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process char *args[]={"/bin/bash",NULL}; execvp(args[0],args); printf("Ending-----"); return 0; }
Compiling C Code
In order to compile given examples and create executable we will use gcc in order to compile example source code. We assume that we will put source code to the file example.c
.
$ gcc -o example example.c
And we will run created example
binary like below.
$ ./example
Create Process with execvp() Function
execcvp()
can run any binary or shell script provided as the first argument. In this example we will run binary /bin/bash
.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process char *args[]={"/bin/bash",NULL}; execvp(args[0],args); printf("Ending-----"); return 0; }
Create Process with execv() Function
execv()
function can be use to provide the executable we want to run as a process and provide parameters. In this example we will provide arguments as char array.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process char *args[]={"ls","-l",NULL}; execv("/bin/ls",args); printf("Ending-----"); return 0; }
Create Process with execl() Function
With execl()
function we can provide the execcutable and arguments directly to the function and get return code.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process int ret; ret=execl("/bin/ls","-l",NULL); printf("Ending-----"); return 0; }
Create Process with execlp() Function
If we d not now the example path of the given executable we can search for it. The current environment variables will be used to search given executable file search. In this example we will search for ls
command.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process int ret; ret=execlp("ls","ls","-l",NULL); printf("Ending-----"); return 0; }
Create Process with execle() Function
The default behaivour of the exec
functions is using default environment. But we can explicitly specify new environment variables with the execle()
function. We will use a char array pointer which will hold environment variables separated with =
equal sign. In this example we will specify the HOME
environment variable.
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { //Run Bash By Creating New Process int ret; char *env[]={"HOME=/home/ismail","LOG=/var/log",NULL}; ret=execlp("ls","ls","-l",NULL); printf("Ending-----"); return 0; }
PHP exec() Function
PHP provides single exec()
function which can be used directly run commands in operating system shell. In this example we will run command ls
and print the output with the echo
PHP statement.
<?php echo exec('ls'); ?>