execlp() 系统调用如何工作?

2024-01-03

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

int main(){
pid_t pid;
pid = fork();
if(pid<0){
   fprintf(stderr, "fork failed");
   return 1;    }
else if(pid == 0){  
   execlp("bin/ls", "ls", NULL);}
else{
   wait(NULL);
   printf("child complete\n");
   }
return 0;
}

据我所知,创建了一个子进程,由于 fork 返回的 pid 为“0”,因此它进入包含 execlp 的块并执行它,然后父进程等待子进程退出,然后打印“childcomplete” ”。如果我错了,请纠正我。但我不明白 execlp() 在这里是如何工作的。有人可以解释一下吗?


fork创建一个新进程,它被父进程调用一次,但在父进程和子进程中返回两次。

在子进程中调用execlp执行指定的命令ls.

这将用新的程序文件替换子进程(ls程序文件),这意味着以下。

当一个进程调用execlp或其他 7 个之一exec函数,该进程完全被新程序取代,新程序开始在其主程序中执行 功能。

进程 ID 不会随时间变化exec,因为新进程不是 创建的。exec仅替换当前进程的文本、数据、堆和堆栈 使用磁盘中的全新程序进行分段。

的组合fork其次是exec叫做spawning a new process在某些操作系统上。

希望它或多或少是清楚的。如果您还有其他问题,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

execlp() 系统调用如何工作? 的相关文章

  • 如何在 UNIX / Linux 操作系统下使用 sed 替换带有换行符 (\n) 的模式?

    我有一个 txt 文件 其中包含 Some random text here This file has multiple lines Should be one line I use sed q N s n sl g t q file1
  • 将用户添加到组但运行“id”时未反映

    R 创建了一个名为 Staff 的组 我希望能够在不以 sudo 身份启动 R 的情况下更新软件包 所以我使用以下方法将自己添加到员工中 sudo usermod G adm dialout cdrom plugdev lpadmin ad
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • shell 脚本:错误的解释器:使用 pwd 时没有这样的文件或目录

    我想用 for 循环遍历目录中的文件 但这出现了 echo bad interpreter No such file or directory code bin bash count 0 dir pwd echo dir FILES ls
  • meld - GLib-GIO-ERROR**:系统上未安装 GSettings 架构

    经过近40个小时的努力 我终于安装了meld 3 14 2 在Redhat 6 3服务器的NFS共享上 安装了每个依赖项 最后似乎成功了 但最后一个错误需要解决 meld 20703 GLib GIO ERROR No GSettings
  • Azure:列出操作系统映像

    我是 Windows azure 新手 我看过这个文档 http msdn microsoft com en us library windowsazure jj157191 aspx 对我来说它有效 在画廊上列出图像 https mana
  • 如何复制每个扩展名为 X 的文件,同时保留原始文件夹结构? (类Unix系统)

    我正在尝试将每个 HTML 文件从 src 文件夹复制到 dist 文件夹 但是 我想保留原始文件夹结构 如果 dist 文件夹不存在 我想创建一个新文件夹 如果文件夹不存在则创建 d dist mkdir dist 复制每个文件 cp R
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • nodeJS exec 不适用于“cd”shell cmd

    var sys require sys exec require child process exec exec cd home ubuntu distro function err stdout stderr console log cd
  • 如何通过 shell 脚本确定网页是否存在?

    我正在尝试制作一个程序 可以将一系列漫画扫描转换为一个 pdf 文件 并且我不想尝试下载图片来确定我是否有正确的网址 是否有一个 shell 脚本命令可以用来检查网页是否存在 在 NIX 下 您可以使用curl发出一个简单的HEAD要求 H
  • 在 Unix 中添加用户和组

    有谁知道在unix中添加用户和组以及删除它们的api吗 我想以编程方式执行此操作 谢谢 坦率 我开始查看一些系统调用并发现以下内容 请注意 它们具有不同的标准 因此并非所有标准都可以在您的 Unix 版本上运行 getpwent setpw
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 小牛队 macports 安装过时

    当我升级到 OS X Mavericks 后 所有安装的端口都变得过时了 我无法再使用我的 gcc 请帮忙 The following installed ports are outdated bzip2 1 0 6 0 lt 1 0 6
  • 使用 sigaction(),c

    我正在读一些关于sigaction 来源来自我的课程笔记 我不确定我是否理解这段文字 信号掩码仅在以下持续时间内计算和安装 信号处理程序 默认情况下 信号 sig 发生时也会被阻塞 使用 sigaction 为特定信号安装操作后 它会保持安
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何通过 UNIX mailx 命令发送电子邮件?

    如何通过 UNIX 发送电子邮件mailx命令 一个例子 echo something mailx s subject email protected cdn cgi l email protection 发送附件 uuencode fil
  • 如何在 shell 脚本中操作 $PATH 元素?

    有没有一种惯用的方法从类似 PATH 的 shell 变量中删除元素 这就是我想要的 PATH home joe bin usr local bin usr bin bin path to app bin and remove or rep
  • UNIX系统调用监视器

    如何监控进程的系统调用 Check strace http linux die net man 1 strace 在最简单的情况下 strace 运行指定的命令直到退出 它拦截并记录进程调用的系统调用以及进程接收的信号 每个系统调用的名称
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without

随机推荐