26.1 system 函数

26.1.1 函数说明

system(执行shell 命令)
相关函数 fork,execve,waitpid,popen

 #include <stdlib.h>
int system(const char * string);
  • 函数功能:简化 exec 函数
  • 函数说明
    • system()会调用 fork() 产生子进程,由子进程来调用 /bin/sh -c string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回原调用的进程。
    • 在调用 system() 期间 SIGCHLD 信号会被暂时搁置,SIGINT 和 SIGQUIT 信号则会被忽略。
    • 等同于 /bin/bash -c "cmd" 或者 exec("bash", "-c", "cmd")
  • 返回值
    • 如果 system()在调用 /bin/sh 时失败则返回 127,其他失败原因返回-1。
    • 若参数 string 为空指针(NULL),则返回非零值。
    • 如果system()调用成功则最后会返回执行 shell 命令后的返回值,但是此返回值也有可能为 system()调用 /bin/sh 失败所返回的 127,因此最好能再检查 errno 来确认执行成功。
  • 附加说明
    • 在编写具有SUID/SGID权限的程序时请勿使用 system(),system() 会继承环境变量,通过环境变量可能会造成系统安全的问题。

26.1.2 system 应用

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h> char *cmd = "date"; int main(void)
{
system("clear");
system(cmd); return ;
}

  编译执行

  

26.1.3 构建 mysystem 命令

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> char *cmd1 = "date > s1.txt";
char *cmd2 = "date > s2.txt"; void mysystem(char *cmd)
{
pid_t pid;
if((pid = fork()) < ) {
perror("fork error");
exit();
} else if(pid == ) {
if(execlp("/bin/bash", "/bin/bash", "-c", cmd ,NULL) < ) {
perror("execlp error");
exit();
}
} wait();
} int main(void)
{
system("clear");
system(cmd1); mysystem(cmd2); return ;
}

  编译调试

  

26.6 进程状态切换

  

  • runnable:就绪状态
  • running:运行状态
  • block/suspend:阻塞或挂起状态
  • dead:终止状态。正在运行的状态调用 return/exit_exit 进入 dead 状态
  • os scheduler:系统调度

最新文章

  1. 一、jquery简介
  2. OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service &amp; Client
  3. SQL增删查改注意的事项
  4. linux服务开机启动顺序
  5. Mac系统如何配置adb
  6. 怎样修改Windows7环境变量
  7. 修改placeholder颜色
  8. Python一些字符串判断和转换
  9. DP——由蒟蒻到神犇的进阶之路
  10. [JSOI2007]麻将
  11. 【Unity】微软的一款依赖注入组件
  12. Scrapy案例02-腾讯招聘信息爬取
  13. Flask Mysql数据库连接
  14. IP保留地址
  15. [JLOI 2016]成绩比较
  16. BGP - 4,BGP的三张表
  17. python3解析库pyquery
  18. delphi 获取一个字符占用几个字节,方法
  19. (原)用WebBrowser浏览Office Web Apps Server,除去“下载”按钮
  20. 【App性能】:TraceView分析法

热门文章

  1. 工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
  2. AITP
  3. P1637 三元上升子序列
  4. [bzoj1717][Milk Patterns 产奶的模式]
  5. [luoguU48834][count]
  6. SQL问题+知识点总结总
  7. __int128
  8. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)
  9. easyUI,重新渲染
  10. 原生JS实现$.ajax