初识Linux · 进程(3)

前言:

承接上文中对进程的内部属性及在操作系统层面的组织方式、系统接口调用、task_struct等方面的介绍,今天我们将从进程的相关属性出发,继续探讨进程的创建过程。

进程的创建承接上文。

上文提到,进程的创建是通过调用系统接口fork实现的,因此有时对子进程理解不深的人可能会编写如下代码:

while(1){    printf("aaan");    fork();    printf("...n");}

这段代码本身并无错误,但运行时会发现打印的结果并非单一的父子进程输出。因为子进程会执行父进程的后续代码,导致子进程也会进入死循环,进而创建更多的子进程,形成指数级增长。因此第二个printf语句的输出会呈1、2、4、8的模式递增,这容易让人感到困惑。

接下来,我们来看另一个场景,编写了如下代码:

printf("I am a child process, my pid is %dn", getpid());printf("I am a parent process, my pid is %dn", getppid());

初识Linux · 进程(3)运行这段代码时,你会发现pid会变化,这是正常的现象。但为什么ppid保持不变呢?这也是正常的吗?

当我们使用指令ps -xaj打开任务管理器界面时,会发现2878进程是bash(注意,2878不一定是bash,具体取决于./test,每个进程的pid都会变化)。

初识Linux · 进程(3)那么,什么是bash呢?

当我们运行:

初识Linux · 进程(3)bash会提示我们./是个目录,无法运行。

实际上,bash就是命令行解释器。我们刚才运行的./test就像是公司的实习生,而bash则是公司的boss,管理着所有的实习生(子进程)。

为什么我们要创建子进程呢?

根据前面的代码,我们知道子进程会继承父进程的后续所有代码。但我们创建子进程的目的是为了执行这些代码吗?父进程也可以执行啊,为什么要创建子进程呢?这时候,前面埋下的伏笔就起作用了。这里有一个容易让人迷惑的问题:一个函数的返回值可以返回几次?

大多数初学者可能都会回答一次,但fork的奇异之处就在这里:

初识Linux · 进程(3)当我们man fork后,在手册中查询返回值的描述时,翻译过来就是:成功创建子进程,那么子进程的Pid就会返回给父进程,0返回给子进程,失败了则返回-1给父进程。也就是说,成功时会有两个返回值,我们就可以编写如下代码:

pid_t id = fork();if(id == 0){    printf("hehehen");}else{    printf("hahahhan");}

最后的打印结果是:

初识Linux · 进程(3)按照传统C语言的逻辑,只会打印一个,但这里却颠覆了我们的代码观念。

奇怪的是,明明变量只有一个id,为什么会有两份呢?

悟空CRM v 0.5.5 悟空CRM v 0.5.5

悟空CRM是一种客户关系管理系统软件.它适应Windows、linux等多种操作系统,支持Apache、Nginx、IIs多种服务器软件。悟空CRM致力于为促进中小企业的发展做出更好更实用的软件,采用免费开源的方式,分享技术与经验。 悟空CRM 0.5.5 更新日志:2017-04-211.修复了几处安全隐患;2.解决了任务.日程描述显示问题;3.自定义字段添加时自动生成字段名

悟空CRM v 0.5.5 284 查看详情 悟空CRM v 0.5.5

实际上,在fork的时候,fork的实现部分,return id是代码吧?在fork的函数体内,已经创建了子进程,所以会返回两份id,因为父进程也会进入fork函数,因此有了两份id。至于为什么会有“两份”,我们先埋个伏笔。

由此得出结论,子进程的创建是为了执行不同的任务,而不是为了执行与父进程相同的工作。

那么,我们如何创建指定数量的进程呢?

如果我们采用最开始的指数级别创建方式,显然不好控制。我们可以利用fork的返回值来帮助我们创建指定数量的进程。因为创建成功时,会返回0给子进程,我们可以让这个子进程进入一个函数体中不再出来,这样就不会导致子进程创建子进程的情况:

void Run(){    while(1)    {        printf("My pid is %d, ppid is %dn", getpid(), getppid());        sleep(1);    }}int main(){    for(int i = 0; i < 5; i++)    {        pid_t id = fork();        if(id == 0)        {            Run();            break;        }    }    Run();    return 0;}

来看一下结果。

初识Linux · 进程(3)初识Linux · 进程(3)不出所料,我们创建了6个进程,主函数是第一个进程,后面通过for循环创建了5个子进程,且5个子进程之间没有关联。通过它们的pid我们发现5个子进程的ppid都是父进程的12607。我们大胆预测父进程的ppid 4335是bash进程,这一点我们就不验证了。

现在我们已经基本熟悉了进程的创建,那么如何查看进程的大部分信息呢?

首先引入一个问题,指令是进程吧?那么我们运行指令后,指令的工作路径在哪里呢?这个问题可能有点让人摸不着头脑,我们用文件举例,如果我们编写如下代码:

int main(){    chdir("/home/whb/111");    FILE *fp = fopen("log.txt", "w");    (void)fp; // 忽略警告    fclose(fp);    while(1)    {        printf("I am a process, pid: %dn", getpid());        sleep(1);    }    return 0;}

那么log.txt文件默认会在哪里创建呢?应该是当前代码的工作路径吧?

初识Linux · 进程(3)在VS中就像这样,同理,Linux中的进程工作时也应该有自己的工作路径,我们从哪里查看工作路径呢?

在根目录的proc中,proc是process的缩写。

初识Linux · 进程(3)此时,我们就可以看到proc中的信息了。如果我们要查看某个具体进程的信息,只需要:

初识Linux · 进程(3)同时运行其他两条指令,我们在27847父进程中可以注意以下事项:

初识Linux · 进程(3)本文首先关注两个属性,一个是cwd,一个是exe,cwd是current working directory,当前工作目录的意思,exe则记录对应进程中可执行文件的路径。

当你对某个进程进行cd操作时,发现可以cd进去,说明进程本质上就是一个个的目录,目录中记录了进程的所有信息。此时,对Linux中“一切皆文件”的理解又加深了一层!

感谢阅读!

以上就是初识Linux · 进程(3)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/727425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月25日 10:06:17
下一篇 2025年11月25日 10:08:19

相关推荐

  • 在炒作经常淹没物质的市场中,只有少数区块链平台显示了耐用性和深度

    在炒作循环经常淹没物质的市场中,只有少数区块链平台显示了长期成功所需的耐用性和深度。 在炒作循环经常超过物质的市场中,只有少数区块链平台显示出长期成功所需的耐用性和深度。现在重要的项目是在整个行业中提供真正的可扩展性,可证明的一致性和有意义的效用的项目。 随着加密空间的成熟,用户和投资者都超越了猜测…

    2025年12月8日
    000
  • 随着Google的搜索趋势,Meme Coins的搜索趋势达到了12个月的低点

    google搜索趋势中的模因硬币(如shiba inu(shib)、dogecoin(doge)以及pepe(pepe))的热度已跌至12个月以来的最低点。尽管这些代币的价格依旧保持正值,但市场对其的关注度似乎正在减弱。 Shiba Inu(加密货币:Shib)与Dogecoin(加密货币:Doge…

    2025年12月8日
    000
  • 到2025年底,Ruvi AI(Ruvi)将退还13,233%,超过Tron(TRX)

    加密市场正掀起一股热潮,预测Ruvi AI(Ruvi)将在2025年底实现13,233%的增长。目前的预售价格为0.015美元,预计到2025年底将达到1美元,这意味着最低限度的投资1,000美元也可能带来高达133,233美元的回报。 Ruvi AI是一款基于创意与自动内容生产行业的去中心化超级应…

    2025年12月8日
    000
  • certik审计确认了BlockDag在Mainnet之前的智能合同强度

    blockdag顺利完成certik智能合约审计,这是区块链安全领域的权威机构,成功迈过了一道重要门槛。 卓越的安全性能、显著的价格吸引力以及长远的发展规划,正逐步确立该项目在加密货币市场的地位。XRP在技术革新后吸引了市场目光,当前价格目标位于2.70美元附近,成交量的持续攀升支撑了这一趋势。同时…

    2025年12月8日
    000
  • 互联网计算机(ICP)本周出现是表现最佳的硬币

    睿智的投资人总是在寻找下一个潜力股。今日,cmc发布的最新数据显示了10种表现最优的加密货币。 加密货币市场依然展现出强劲的韧性和活力,部分代币在过去一周内实现了显著的增值。 在这些表现优异的代币中,互联网计算机(ICP)的价格提升了5.69%。 特别值得一提的是,数字资产市场的这一积极趋势尤为引人…

    2025年12月8日
    000
  • Ruvi AI(Ruvi)以其创新方法超过雪崩(avax)

    近期,雪崩(avax)一直备受瞩目,因为它正努力实现稳定收益并突破30美元的关键价位。 虽然雪崩(Avax)作为一个高性能的区块链平台而闻名,但它依然在努力争取达到30美元的目标。然而,对于渴望短期内获取高额回报的用户来说,最新的消息指出Ruvi AI在短短数周内凭借其预售的成功以及高达50%的潜在…

    2025年12月8日
    000
  • Ruvi AI将在接下来的几个月中胜过狗狗币取得可观的收益

    ruvi ai正快速成为加密货币界最受瞩目的项目之一,这并非没有原因。 随着夏季的到来,新一轮的投资窗口也随之开启,投资者希望在季末前最大化他们的投资组合。在这段时间里,有两个名字频繁出现在讨论中:Ruvi AI和Dogecoin。尽管Dogecoin因其 meme 货币的身份而广为人知,但越来越多…

    2025年12月8日
    000
  • 顶级RWA加密项目将于2025年观看

    本文探讨,列出和审查了最佳的rwa加密投资,这些投资可能在2025年提供超大的回报。 迫切需要弥合传统金融与区块链技术之间差距的努力为新的创新浪潮打开了大门,令牌化是最新的。 该概念本身(令牌化)与将物理和传统金融资产转换为区块链的数字代币有关。 在太长时间以来,由于高入境成本,地理限制和流动性问题…

    2025年12月8日
    000
  • Ruvi AI筹集了150万美元的第二阶段预售,针对雪崩(Avax)

    加密货币市场持续吸引着富有远见的创新项目,而ruvi ai正逐渐成为一个极具潜力的突破口。 加密货币市场继续吸引着富有远见的创新项目,但Ruvi AI正成为一个特别突出的存在。在其第二阶段预售期间,Ruvi AI已筹集了超过150万美元的资金,销售了近1.35亿个代币。这种迅速的成功让分析人士开始猜…

    2025年12月8日
    000
  • 4 2025年6月表现出色的加密货币:Web3 AI,Tron,Stellar和Polygon如何提供真实的结果

    比较六月表现出色的加密货币。查看web3 ai、tron、stellar 和 polygon 的更新,以促进强大的实用性和市场吸引力。 六月在加密市场中热度攀升,焦点转向具备强劲应用案例和日益增长牵引力的顶级加密货币。在不断涌现新名字的领域里,拥有真实更新和社区支持的一致表现者正崭露头角。目前,有四…

    2025年12月8日
    000
  • 为什么卡巴可以成为分散金融的迈克尔·乔丹

    您可以说,以及近期几个月kaspa的价格波动,但毫无疑问:这个加密项目背后拥有一个非凡的社区。 近几个月,Kaspa(KPA)引起了广泛关注,因其致力于成为具备卓越速度与可扩展性的主链区块链。 该项目的社区互动及其未来的增长潜力一直是热议话题。正如您的加密货币团队在最新视频中所展示的那样,该视频迅速…

    2025年12月8日
    000
  • 4个加密货币在2025年脱离人群

    几乎每星期都有大量新币种涌现,这让人们难以分辨方向。这就凸显了关注已有发展势头项目的必要性。 在加密货币快速变化的环境中,新币种几乎每周都在出现,对于寻找有前景项目的参与者来说,这是一项艰巨的任务。因此,把目光投向那些已展现强劲动力的项目显得尤为重要。 当我们展望2025年下半年时,一些币种脱颖而出…

    2025年12月8日
    000
  • 在2025年,找到最有希望的加密货币现在更多地是关于实质而不是炒作。

    具备成熟兴趣的投资者将更加注重代码透明性、平台稳健性及可靠验证。 在2025年的加密领域,寻找最具潜力的加密货币正逐渐转向实质而非炒作。拥有成熟兴趣的投资者将更倾向于关注代码透明性、平台稳健性以及可靠验证。其中一个重要的标志便是受信任的第三方公司进行的审计,这能证实项目的技木实力与可靠性。 在众多知…

    2025年12月8日
    000
  • Ruvi AI以其雄心勃勃的价格目标240美元捕捉了投资者的热情

    索拉纳(solana)常被认为是性能最优的区块链平台之一,它以240美元的远大目标吸引了众多投资者的目光。 索拉纳(Solana)因其高效的交易处理能力而广受赞誉,当前以240美元的远大目标吸引了投资者的极大热情。不过,尽管索拉纳(Solana)正努力重拾昔日辉煌,另一匹黑马鲁维·AI(Ruvi A…

    2025年12月8日
    000
  • 大卫·施瓦茨(David Schwartz

    在回应关于“自由罗杰”运动的问题时,施瓦茨称美国当局的处理方式是一场长期的斗争。 Ripple首席技术官大卫·施瓦茨分享了他对罗杰·维尔法律案件的看法,罗杰·维尔是比特币的先驱人物以及加密领域中备受争议的人物。 在探讨“自由罗杰”运动的公开帖子中,施瓦茨指出,美国当局的行动已经持续多年,超越了近期的…

    2025年12月8日
    000
  • 这就是为什么互联网计算机(ICP)价格正在抽气的原因

    互联网计算机(icp)代币再度在加密货币市场掀起波澜。尽管过去24小时内有所回落,跌幅达4%,但其价格依然维持在5.27美元以上。随着投资者获利回吐,交易量显著攀升了21%。 近期,ICP因其新颖的AI项目和链间功能成为关注焦点,在经历了一段低迷期后重新吸引了市场的目光。通过X平台发布的更新显示,I…

    2025年12月8日
    000
  • Cardano(ADA)加入纳斯达克的重组加密货币定居点指数

    这种进展让卡尔达诺(cardano)与比特币(bitcoin)和以太坊(ethereum)等领先的加密货币一同获得了更多的机构认可。 近日,纳斯达克宣布了对纳斯达克加密货币结算指数(NCIUS)的重新构建,该指数是基于2025年6月2日生效的Hashdex NASDAQ Crypto US ETF。…

    2025年12月8日
    000
  • 比特币[BTC]重新恢复了累积模式。

    复苏的巨鲸,不断增长的资产外流以及持续的买入动力正在激发乐观情绪。 比特币[BTC]再度开启积聚态势。复苏的巨鲸、日益增加的资产转移以及稳固的买入需求正在助推积极氛围。 尽管价格波动依旧存在,但基础链上指标显示,若趋势得以延续,BTC可能已准备好迎接突破。 据Lookonchain统计,本周,一只沉…

    2025年12月8日
    000
  • 4个硬币将2025变成加密货币的关键年份

    该综述着重于展示真正有潜力的代币。web3 ai凭借其ai驱动的理念吸引了早期投资者的关注。 2025年,加密领域正逐渐成为关键的一年。尽管行业趋于成熟,但仍充满了不可预测的价格波动与新机遇。关键的难题在于如何准确判断下一个投资方向。 精明的投资策略并非一味追随最大热点,而是通过扎实的基础、持续的更…

    2025年12月8日
    000
  • 加密球体在过去24小时内表现出相对稳定的性能

    在过去的一天里,加密货币市场整体呈现出平稳态势。依据最新统计,全球加密货币总市值上升了0.63%,达到约3.29万亿单位。然而,24小时内的交易额却下滑了18.67%,降至849.8亿美元,与此同时,加密市场的恐慌与贪婪指数维持在55点,表明市场情绪偏中性。 比特币与以太坊分别录得0.73%和1.0…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信