Linux学习笔记1-system函数介绍
system()函数的效率
system()函数会创建至少两个进程。一个用于运行shell,另外一个或多个则用于shell所执行的命令(执行每个命令都会调用一次exec())。
system()函数的安全
system()函数是一个不安全的函数,除了在设置用户ID和组ID时使用system()函数会出问题外,但这个安全问题可能在当前的linux版本中已经不存在了。
在SEI CERT中有提到,禁止使用system()函数,原因是system()函数对command不会做路径检查。
https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152177
system()函数的返回值
#include <stdlib.h>
#include <stdio.h>
int main()
{
int rc = 0;
rc = system("ls");
printf("cmd ls rc value is %d\n", rc); //这里返回是0
rc = system(NULL);
printf("cmd NULL rc value is %d\n", rc); //这里返回是1
rc = system("lb");
printf("cmd lb rc value is %d\n", rc); //这里返回是32512
rc = system("ls |grep XYZ");
printf("cmd ls |grep XYZ rc value is %d\n", rc); //这里返回是256
rc = system("exit 127");
printf("cmd exit 127 rc value is %d\n", rc); //这里也是32512
rc = system("sleep 100");
printf("cmd sleep rc value is %d\n", rc); //这里按ctrl+Z,并kill掉sleep进程后,会打印15
return 0;
}
这里介绍一下最后一条命令,如果系统调用成功,system()会返回执行command的子shell的终止状态。shell的终止状态是其执行最后一条命令时的退出状态。如果命令被信号杀掉,shell会返回信号编号,这里是返回15,为SIGTERM信号。