4 command-line execute-command
我最近打算运行该命令pkexec,但不小心设法在exec没有选项或参数的情况下自行运行该命令。我查看了man页面的描述exec,但我仍然不知道它是什么意思:
DESCRIPTION
The exec() family of functions replaces the current process image with
a new process image. The functions described in this manual page are
front-ends for execve(2). (See the manual page for execve(2) for fur?
ther details about the replacement of the current process image.)
Run Code Online (Sandbox Code Playgroud)
实际上描述还在继续......但其余的描述也没有给我太大帮助......所以这真的是我的问题,该exec命令有什么作用?我是否只是通过自己执行它而没有任何选项或参数来做任何事情exec?它与pkexec命令有任何关系吗?
“exec()函数族”……是函数。它们在源代码中使用。它们不是要由用户1执行的命令。它们通常由需要执行另一个程序的程序使用(例如,shell 本身sudo、pkexec、 等)。exec直接调用的程序会发现自己被exec'd 程序取代,因此典型用法通常是fork和exec。
一个人为的例子看起来像:
$ cat foo.c
#include <unistd.h>
int main()
{
const char * path = "/bin/echo";
char * args[] = {"echo", "Hello", "World!", NULL};
execv(path, args);
}
$ gcc -o foo foo.c
$ ./foo
Hello World!
Run Code Online (Sandbox Code Playgroud)
您可以看到在各种程序上exec使用的实际使用实例strace,包括strace它本身:
$ strace -e execve ./foo
execve("./foo", ["./foo"], [/* 52 vars */]) = 0
execve("/bin/echo", ["echo", "Hello", "World!"], [/* 52 vars */]) = 0
Hello World!
+++ exited with 0 +++
Run Code Online (Sandbox Code Playgroud)
注意它strace自己是如何exec调用程序的,然后程序依次调用exec.
1 ...除了在exec外壳内置,这是一个壳特征。
execshell 内置exec函数就像函数一样,调用exec程序名会导致 shell 被它替换。但是, 的常见用法exec通常用于修改或添加文件描述符。
另一个人为的例子:
$ exec 3</dev/urandom
$ read -u 3 -n 10
$ echo "$REPLY" | base64
oZN5Qsn3nAs+1GFUCg==
Run Code Online (Sandbox Code Playgroud)
你可能认为我们可以/dev/urandom直接读入。是的,我们可以。但是,这在以下情况下很有用:
stdout到整个 shell 会话的文件)。| 归档时间: |
|
| 查看次数: |
15556 次 |
| 最近记录: |