标签: exec

exec bash 内置如何在内部工作?

这个链接我得到以下关于 exec bash 内置命令的信息:

如果提供了命令,它将替换外壳而不创建新进程。

它如何准确地替换外壳(即它如何在内部工作)?exec*()系统调用是否相同?

bash exec

7
推荐指数
2
解决办法
2792
查看次数

回显文件描述符会覆盖文件吗?

我在尝试写入文件描述符时无法理解发生了什么?它似乎覆盖了原始内容?这是预期的行为吗?

我在下面的例子中复制了这个:

$ echo "The quick brown fox ..." > example.txt  
$ echo "The quick brown fox ..." >> example.txt
$ cat example.txt
The quick brown fox ...  
The quick brown fox ...
$ exec 88<>example.txt
$ cat example.txt
The quick brown fox ...  
The quick brown fox ...
$ echo "jumped" >&88  
$ cat example.txt
jumped  
ck brown fox ...  
The quick brown fox ...
$ echo "jumped" >&88  
$ cat example.txt
jumped  
jumped  
n fox ...  
The quick …
Run Code Online (Sandbox Code Playgroud)

bash files exec

7
推荐指数
1
解决办法
1041
查看次数

为什么 exec 在程序退出后打印其输出?

我正在编写一个程序来将一个命令传递给另一个命令。输入将来自命令行:

$ ./a.out ls '|' wc
c2 PID 6804
c1 PID 6803
PARENT PID 6802
$       2       2      17
Run Code Online (Sandbox Code Playgroud)

为什么在提示返回后输出打印。有什么办法可以防止吗?

这是我写的代码:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char * argv[])
{
    if(argc <= 1 )
    {
        printf("ERROR: No arguments passed\n");
        printf("USAGE: ./pipe <command 1> | <command 2>\n");
        return 1;
    }

    char * cmd1[50];
    char * cmd2[50];
    int cmd1_arg = 0;
    int cmd2_arg = 0;
    int pipe_num = 0;
    
    for(int cla = 1; cla<argc; …
Run Code Online (Sandbox Code Playgroud)

c pipe exec

7
推荐指数
2
解决办法
643
查看次数

以非 root 用户身份运行服务的推荐方法是什么?

我有一个简单的 init.d 脚本来启动和停止一个进程。我以 root 身份调用 init.d,但我希望它控制的进程以特定用户身份运行。

网上最常见的建议似乎是做

su myuser -c "my_process args"
Run Code Online (Sandbox Code Playgroud)

但是,这会创建第二个进程空间、新 shell 等,并且有些不雅。

我更喜欢使用exec(),因为它取代了外壳,但这不以用户为参数。这是我应该setuid()首先使用的情况吗?设置gid怎么样?有什么需要注意的问题吗?

或者,是否有特定于发行版的解决方案来以不同的用户身份运行 init.d?我的环境是Centos 6.4。

init-script services exec

6
推荐指数
1
解决办法
1925
查看次数

exec 和 dbus-launch 有什么区别?

如果我开始一个进程,特别是在会话开始时,使用exec p和 有dbus-launch p什么区别?

d-bus exec

6
推荐指数
1
解决办法
8288
查看次数

确定是否存在shebang的最快方法

如果我有一个文件

#!/usr/bin/env foobar
Run Code Online (Sandbox Code Playgroud)

确定此文件是否具有 hashbang 的最快/最佳方法是什么?我听说你只能读取前 2 个字节?如何?

shell executable exec shebang

6
推荐指数
2
解决办法
1686
查看次数

6
推荐指数
1
解决办法
763
查看次数

是否可以在子shell中执行一些命令而不立即退出?

我使用fish shell,并希望能够“获取”一些用sh兼容语法编写的shell脚本,而fish无法读取这些脚本。例如,许多软件希望您提供一些 shell 脚本来导出有用的环境变量:

# customvars.sh
FOOBAR=qwerty
export FOOBAR
Run Code Online (Sandbox Code Playgroud)

如果我不关心保留局部变量和函数定义,一种解决方法是使用 exec 用 /bin/sh 替换当前进程,然后返回到fish

# We start out on fish
exec /bin/sh
Run Code Online (Sandbox Code Playgroud)
# Running a POSIX shell now
. customvars.sh
exec /usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
# Back on fish
echo $FOOBAR
Run Code Online (Sandbox Code Playgroud)

有没有办法将这种模式归结为一个单行代码,我可以将其保存在某个函数中?如果我尝试做

exec /bin/sh -c '. vars.sh; /usr/bin/fish'
Run Code Online (Sandbox Code Playgroud)

我的终端模拟器窗口立即关闭,而不是带我回到交互式鱼提示。

shell fish exec

5
推荐指数
1
解决办法
2860
查看次数

linux在execve一个ELF时如何决定加载地址和入口点?

当linux有execve()一个ELF时,它会将该ELF映射到进程的内存空间中,并从入口点开始运行代码。但是内核是如何决定ELF的加载地址和入口点的呢?

如果禁用 ASLR,它将查找.p_vaddr每个 PT_LOAD 段并使用.e_entryELF 标头作为入口点。

但是如果启用 ASLR 会怎样呢?内核是否会简单地向上述所有内容添加随机移位,但保持它们的相对位置?

ELF的内容会影响内核的行为吗?就像.p_vaddrPT_LOAD 段的最小值是零还是非零?比如.e_typeELF header是ET_DYN还是ET_EXEC?

我特别谈论的是 x86_64。

elf linux-kernel exec aslr

5
推荐指数
0
解决办法
907
查看次数

如何执行 sudo + exec?

我需要用来sudo以不同的用户身份运行进程。但如何使用sudo类似exec

sudo -u www-data exec php -r 'sleep(2); echo 5;'
Run Code Online (Sandbox Code Playgroud)

替换 sudo 进程?

为什么和要求?

  • 最小化总进程数
  • 命令是连续启动的,不可能一次性启动它们sudo
  • 该解决方案需要表现得像没有exec,即没有背景等。

shell bash sudo exec

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

exec ×10

bash ×4

shell ×3

aslr ×1

c ×1

d-bus ×1

elf ×1

executable ×1

files ×1

fish ×1

init-script ×1

io-redirection ×1

linux-kernel ×1

pipe ×1

services ×1

shebang ×1

sudo ×1