「深入了解 Linux exec 输出」 (linux exec 输出)

深入了解 Linux exec 输出

在 Linux 操作系统中,exec 是一个非常重要的函数,用于执行一个新进程时,替代当前进程映像。当一个进程调用 exec 函数时,它所在的用户空间的代码、数据和堆栈都会被替换成新进程的映像。这个新映像会从文件系统中加载到进程的内存空间中,并开始执行。

exec 函数的常见形式是 execl,该函数用于执行一个可执行文件并传递命令行参数。execl 的原型为:

“`

int execl(const char *path, const char *arg, /* (char *) NULL */ …);

“`

其中,path 是要执行的可执行文件的路径名,arg 是要传递给该程序的命令行参数,以 NULL 结尾。

在执行 execl 函数时,它会将指定的可执行文件加载到当前进程的内存空间中,并取代当前进程映像。这意味着,新的程序开始运行时,它将具有与当前进程相同的 PID、PPID 以及其他环境变量和打开的文件句柄。

除了 execl,其他常见的 exec 函数包括:

– execle:与 execl 相同,但允许明确指定环境变量。

– execlp:与 execl 相同,但允许在 PATH 环境变量中查找可执行文件。

– execv:与 execl 区别在于,它是用数组传递命令行参数的。

– execvp:与 execlp 区别在于,它是用数组传递命令行参数的。

需要注意的是,exec 函数的调用会直接取代当前进程的映像。因此,如果调用成功,它将永久地改变进程的行为,如果调用失败,则当前进程将继续运行。

exec 的输出

通过 exec 函数执行的新进程在启动时将继承当前进程的标准输入、输出和错误输出文件描述符。这意味着,新进程将使用当前进程打开的文件描述符进行输入和输出。

有时候,我们需要将执行新进程时的输出保存到文件中,以进行后续处理。这可以通过将标准输出重定向到一个文件来实现。重定向可以通过 dup2 函数来设置。

“`

int dup2(int oldfd, int newfd);

“`

该函数将 oldfd 所指向的文件描述符复制到 newfd 中。如果 newfd 已经打开,dup2 将关闭它并重复打开 oldfd 所描述的文件。

在执行 execl 函数之前,我们需要先将标准输出文件描述符重定向到文件中。示例如下:

“`c

#include

#include

#include

#include

#include

int mn()

{

int fd = open(“output.log”, O_WRON|O_CREAT|O_TRUNC, 0644);

if (fd

perror(“open”);

return -1;

}

if (dup2(fd, STDOUT_FILENO)

perror(“dup2”);

return -1;

}

close(fd);

execl(“/bin/ls”, “ls”, “-l”, (char *) NULL);

perror(“execl fled”);

return -1;

}

“`

该程序会将标准输出重定向到名为 output.log 的文件中,并以 ls -l 的方式执行 /bin/ls。执行完程序后,输出将被保存到 output.log 文件中。如果没有重定向标准输出,则输出将打印到终端上。

相关问题拓展阅读:

  • 【exec】shell脚本中的 exec 命令
  • linux的find -exec命令的问题

【exec】shell脚本中的 exec 命令

exec 是 bash 的内置命令

shell 的内件命令exec执行命令时,不启用新的shell进程。

source 和 . 不启用新的shell,在当前shell中执行,设定的局部变量在执行完命令后仍然有效。

bash 或 sh 或 shell script 执行时,另起一个子shell,其继承父shell的环境变量,其子shelll的变量执行完后不影响父shell。

exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。

例如在当前shell中执行 exec ls  表示执行ls这条命令来替换当前的shell ,即为执行完后会退出当前shell。

为了避免这个结果的影响,一般将exec命令放到一个shell脚本中,用主脚本调用这个脚本,调用处可以用bash  xx.sh(xx.sh为存放exec命令的脚本),这样会为xx.sh建立一个子shell去执行,当执行exec后该子脚本进程就被替换成相应的exec的命令。

其中有一个例外:当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令!

在shell脚本中使用exec命令,根据操作的对象不同会有不同的行为

文件描述符

shell中描述符一共有12个

0  代表标准输入

1  代表标准输出

2  错误输出

其他 3-9 都是空白描述符

#  exec3>&1 4>&2 1>> bash.log 2>&1

其含义是: 复制标准输出到3 ,错误输出到 4 ,把 3 4 保存在bash.log 这个文件中。

#  ./bash.sh  >> bash.log   2>&1

其含义是:将bash.sh脚本执行的标准输出和错误输出追加重定向到 bash.log

如果exec 跟的是其他命令,则其他命令结束后,本shell也随之停止

#  cat test_exec.sh

###################

#!/bin/bash  

echo “Hello mysql”  

exec echo “Hello oracle”  

echo “Hello sqlserver”

####################

可以看到随着 echo ” hello oracle”  这条指令运行完本 整个脚本执行完毕,后面的 echo ” hello db2″ 没有执行!

Linux shell 脚本中, $@ 和$# 分别是什么意思?

$@  表示所有脚本参数的内容

$# 表示返回所有脚本参数的个数

示例:编写如下shell脚本,保存为test.sh

###############

#!/bin/sh

echo “number:$#”

echo “argume:$@”

###############

执行脚本:

./test.sh first_arg  second_arg

说明:给脚本提供了两个参数,所以$#输出的结果是2,$@代表了参数的内手册容!

怎么理解shell脚本中  exec “`dirname “$0″`/node””$0”  “$@” ?

$# 脚本自己的路径

“`dirname “$0″`”/node    # 脚本目录下的node程序的路径

$@# 脚本被执行时的命令行参数

合起来就是:用脚本目录下的node程序来解释这个脚本本身

exec scala “$0” “$@”是什么意思

这是bash语法。

$0  表示当前脚本的名字

$@  表示当前脚本执没前行的所有参数

exec scala “$0” “$@”    表示用scala命令,带参数,执行当前脚本

exec  sh “$0  在这个文件里,exec sh  $0是什么意思?

############

#!/bin/sh

echo  “Hello!”

sleep 2

execsh 毕察宏”$0″

#############

$0   是位置参数,表示脚本名称

$1   表示脚本的之一个参数,依次类推直到$9

exec用于执行命令、或脚本、或外部可执行程序,会新建一个shell去执行

综上,这里exec sh  “$0”  就是执行脚本本身

所以,就是一个循环过程,每隔两秒打印一次 Hello

#############

#!/bin/sh

echo  “Hello!”

sleep 2

exec   “$0”

#############

linux的find -exec命令的问题

find . -size +c -exec cp /dev/null {} \;

这茄信条指令毁纳瞎是将找纤空到的清除

find . -size +200M -exec /bin/cp /dev/null {} \;

试试truncate

find 宏尺源. -size +c -exec 困芦truncate {} –size 0 蔽态\;

linux exec 输出的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux exec 输出,「深入了解 Linux exec 输出」,【exec】shell脚本中的 exec 命令,linux的find -exec命令的问题的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/207327.html<

(0)
运维的头像运维
上一篇2025-04-08 12:04
下一篇 2025-04-08 12:05

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注