<b>#include <unistd.h></b><b>char **environ;</b><b>int execl(const char *path, const char *arg0, ..., (char *)0);</b><b>int execlp(const char *file, const char *arg0, ..., (char *)0);</b><b>int execle(const char *path, const char *arg0, ..., (char *)0,</b><b>Β char *const envp[]);</b><b>int execv(const char *path, char *const argv[]);</b><b>int execvp(const char *file, char *const argv[]);</b><b>int execve(const char *path, char *const argv[], char *const envp[]);</b>ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅Π»ΡΡΡΡ Π½Π° Π΄Π²Π° Π²ΠΈΠ΄Π°.
execlexeclpexeclenullexecvexecvpargvmainΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
execveΠ€ΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡΡΡΠΈΠΊΡ
pPATHΠΠ΅ΡΠ΅Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
environexecleexecveΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ
execpsexec#include <unistd.h>/* ΠΡΠΈΠΌΠ΅Ρ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² *//* Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ Π΄Π»Ρ argv[0] Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */char *const ps_argv[] = {"ps", "ax", 0};/* He ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ */char *const ps_envp[] = {"PATH=/bin:/usr/bin", "TERM=console", 0};/* ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ exec */execl("/bin/ps", "ps", "ax", 0);/* ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ps Π² /bin */execlp("ps", "ps", "ax", 0);/* ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ /bin Π² PATH */execle("/bin/ps", "ps", "ax", 0, ps_envp);/* ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ */execv("/bin/ps", ps_argv);execvp("ps", ps_argv);execve("/bin/ps", ps_argv, ps_envp);Π ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.2.
execlpΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²
execlp#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main() {<i>Β printf("Running ps with execlp\n");</i><i>Β execlp("ps", "ps", "ax", 0);</i>Β printf("Done.\n");Β exit(0);}ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Ρ Π΅Ρ.Ρ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
psDoneΡΠ΅Ρ
Π΅Ρ$ <b>./ΡΠ΅Ρ
Π΅Ρ</b>Running ps with execlpΒ PID TTYΒ Β STATΒ TIME COMMAND1Β Β Β ?Β Β Β Β SΒ Β Β 0:03 init [5]...1262 pts/1Β SsΒ Β 0:00 /bin/bash1273 pts/2Β SΒ Β Β 0:00 su -1274 pts/2Β S+Β Β 0:00 -bash1463 pts/1Β SNΒ Β 0:00 oclock1465 pts/1Β SΒ Β Β 0:01 emacs Makefile1514 pts/1Β R+Β Β 0:00 ps axΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ
execlpPATHpsΡΠ΅Ρ
Π΅Ρ$ <b>ps ax</b>ΠΠΎΠ³Π΄Π°
psΡΠ΅Ρ
Π΅ΡniceexecΠ‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ
execARG_MAXARG_MAX