码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux--bash、fork、exec、进程替换相关命令


    目录

    1.bash:

    2.fork+exec()例1:

    3.fork+exec()例子2:


    1.bash:

    linux bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令;Bash还能从文件中读取命令,这样的文件称为脚本;和其他Unix shell一样,它支持文件名替换、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。

    bash的命令语法是Bourne shell命令语法的超集。

    bash实质上是一个可执行程序,一个用户的工作环境。
    bash的功能一是可以记入历史命令,第二呢,可以用tab键自动补全。第三。alias命令别名,第四呢,工作控制,可以将某些任务放到后台去运行。再一个是程序脚本就是可以执行shell脚本文件。还有通配符以及内建命令type。

    2.fork+exec()例1:

    利用bash创建ps命令

    利用bash创建ps命令----execl的使用(结合fork)

    fork+exec()是Linux上创建新进程方式;

    //(1)main.c

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. int main()
    7. {
    8. printf("main pid=%d,ppid=%d\n",getpid(),getppid());
    9. pid_t pid=fork();
    10. assert(pid!=-1);
    11. if(pid==0)
    12. {
    13. printf("chilr pid=%d,ppid=%d\n",getpid(),getppid());
    14. execl("/usr/bin/ps","ps","-f",NULL);
    15. printf("excel error");
    16. exit(0);
    17. }
    18. wait(NULL);
    19. exit(0);
    20. }

     

     

    3.fork+exec()例子2:

    当前主程序复制产生一个子进程,子进程用新程序(b)替换自身;

    //(2)main2.c

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. int main(int argc,char *argv[],char *envp[])
    8. {
    9. printf("main pid=%d\n",getpid());
    10. pid_t pid=fork();
    11. assert(pid!=-1);
    12. if(pid==0)
    13. {
    14. char *myargv[]={"b","hello","abc","123",(char *)0};
    15. execve("./b",myargv,envp);
    16. perror("execl error");
    17. exit(0);
    18. }
    19. wait(NULL);
    20. printf("main over\n");
    21. exit(0);
    22. }

    (3)

    //b.c

    1. #include
    2. #include
    3. #include
    4. #include
    5. int main(int argc,char *argv[],char *envp[])
    6. {
    7. printf("b pid=%d\n",getpid());
    8. int i=0;
    9. printf("argc=%d\n",argc);
    10. for(;i
    11. {
    12. printf("argv[%d]=%s\n",i,argv[i]);
    13. }
    14. for(i=0;envp[i]!=NULL;i++)
    15. {
    16. printf("envp[%d]=%s\n",i,envp[i]);
    17. }
    18. exit(0);
    19. }

     

    ./main2

  • 相关阅读:
    uni-app 蓝牙打印, CPCL指令集使用
    用于独立系统应用的光伏MPPT铅酸电池充电控制器建模(Simulink实现)
    【JS】—垃圾回收机制
    2019款保时捷卡宴车发动机故障灯异常点亮
    【算法学习】二分专场-别说你不会二分啦
    Window下安装 Mongodb,并实现单点事务
    LeetCode面向运气之Javascript—第58题-最后一个单词的长度-99.83%
    【Pytorch】Visualization of Fature Maps(2)
    luffy-(7)
    Java给图片增加水印,根据图片大小自适应,右下角/斜角/平铺
  • 原文地址:https://blog.csdn.net/m0_59052131/article/details/127649046
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号