linux命令行函数 linux的命令行指的是什么( 三 )


10.19dig:域名查询工具 / 389
10.20host:域名查询工具 / 393
10.21nmap:网络探测工具和安全/端口扫描器 / 394
10.22tcpdump:监听网络流量 / 398
第11章 Linux系统管理命令 / 407
11.1lsof:查看进程打开的文件 / 407
11.2uptime:显示系统的运行时间及负载 / 411
11.3free:查看系统内存信息 / 411
11.4iftop:动态显示网络接口流量信息 / 413
11.5vmstat:虚拟内存统计 / 415
11.6mpstat:CPU信息统计 / 419
11.7iostat:I/O信息统计 / 420
11.8iotop:动态显示磁盘I/O统计信息 / 423
11.9sar:收集系统信息 / 425
11.10chkconfig:管理开机服务 / 430
11.11ntsysv:管理开机服务 / 433
11.12 setup:系统管理工具 / 434
11.13ethtool:查询网卡参数 / 436
11.14mii-tool:管理网络接口的状态 / 437
11.19rpm:RPM包管理器 / 443
11.20yum:自动化RPM包管理工具 / 446
top命令
第12章 Linux系统常用内置命令 / 450
12.1Linux内置命令概述 / 450
12.2Linux内置命令简介 / 450
12.3Linux常用内置命令实例 / 452
怎么在linux中调用命令行中的命令,比如我想在一个程序中用命令行运行另一个程序Linux编程中在命令行启动另一个可执行文件或调用命令用system函数最简单了linux命令行函数,这个函数原理是在你编写的那个程序的内部启动另一个程序或命令linux命令行函数,从而创建一个新进程linux命令行函数,并等待这个进程执行完毕退出 。如果正常执行,system函数将返回被执行程序或命令的退出码;如果无法运行这个程序或命令,将返回错误代码127;如果是其linux命令行函数他错误 , 返回-1 。这个函数的原型是:
#include stdlib.h
int system(const char *string);
参数string是将要执行的程序文件名或路径,如果是启动一个命令就是一个命令字符串 。
还有一种执行外部程序的方法是exec系列函数,一般是在fork的子进程里面调用exec系列函数 , 那主进程里直接调用exec系列不行吗,为什么要fork再在子进程里调用呢linux命令行函数?因为exec系列的函数(包括execl函数)都是将当前进程替换成新进程,也就是说新进程启动后原来的进程就不存在了 , exec系列函数后面的那些代码就不会再执行了 。如果你不放在fork子进程里面,那主进程在执行execl函数后就完全不存在了,所以exec系列函数的使用都是先fork然后在子进程里面调用 。因为exec系列函数都要使用fork调用,所以我一般是用system函数 。
linux下的命令都是干什么用的?前三个和最后一个是两个类型 。前三个主要是Linux用来创建新的进程(线程)而设计的 , exec()系列函数则是用来用指定的程序替换当前进程的所有内容 。所以exec()系列函数经常在前三个函数使用之后调用,来创建一个全新的程序运行环境 。Linux用init进程启动其他进程的过程一般都是这样的 。
下面说fork、vfork和clone三个函数 。这三个函数分别调用了sys_fork、sys_vfork、sys_clone,最终都调用了do_fork函数,差别在于参数的传递和一些基本的准备工作不同 。可见这三者最终达到的最本质的目的都是创建一个新的进程 。在这里需要明确一下,Linux内核中没有独立的“线程”结构,Linux的线程就是轻量级进程,换言之基本控制结构和Linux的进程是一样的(都是通过struct task_struct管理) 。
fork是最简单的调用,不需要任何参数,仅仅是在创建一个子进程并为其创建一个独立于父进程的空间 。fork使用COW(写时拷贝)机制,并且COW了父进程的栈空间 。
vfork是一个过时的应用 , vfork也是创建一个子进程,但是子进程共享父进程的空间 。在vfork创建子进程之后 , 父进程阻塞,直到子进程执行了exec()或者exit() 。vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork 。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中 。在Linux的manpage中队vfork有这样一段话:Itis rather unfortunate that Linux revived this specter from the past.The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented.Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."

推荐阅读