精华内容
下载资源
问答
  • UNIX and Linux System Administration Handbook(5th) 英文无水印pdf 第5版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自...
  • Pro Linux System Administration: Learn to Build Systems for Your Business Using Free and Open Source Software by James Turnbull English | 13 Apr. 2017 | ISBN: 1484220072 | 998 Pages | PDF | 24.35 MB ...
  • Linux System Programming 中英版 PDF 第二版,希望对你有帮助。
  • Linux system monitor

    千次阅读 2016-03-26 18:07:20
    top vmstat ...r :表示运行队列,如果运行队列过大,表示你的CPU...gnome-system-monitor conky nagios need to install Apache、PHP5、Postfix first. python scripts 基于/proc 文件系统

    top

    output of top

    vmstat

    how to run vmstat

    arguments explanation

    r :表示运行队列,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高

    b :表示阻塞的进程数

    swpd :虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器

    free :空闲的物理内存的大小

    buff : 系统占用的缓存大小

    cache :直接用来记忆我们打开的文件,给文件做缓冲

    si :每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了

    us :用户CPU时间

    sy :系统CPU时间

    so : 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

    sy : 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
    id : 空闲 CPU时间,一般来说,id + us + sy = 100

    wt : 等待IO CPU时间。

    lsof

    tcpdump

    sudo tcpdump -i eth0 -c 3

    netstat

    netstat -r

    netstat -i

    htop

    iostat

    iptraf

    sysv-rc-conf

    对程序进行启动级的操作也可以用update-rc.d命令实现。

    nethogs

    iftops

    <= => :表示的是流量的方向。
    TX:发送流量
    RX:接收流量
    TOTAL:总流量
    Cumm:运行iftop到目前时间的总流量
    peak:流量峰值
    rates:分别表示过去 2s 10s 40s 的平均流量

    gnome-system-monitor

    conky

    nagios

    need to install Apache、PHP5、Postfix first.

    python scripts

    • 基于/proc 文件系统
    展开全文
  • 关于linux system函数调用遇到的坑

    千次阅读 2018-07-11 11:39:10
    关于linux c++守护进程调用调用system函数 我们的程序是守护进程,也就是说在最开始会设置一些信号处理,比如说 ... signal(SIGCHLD, SIG_IGN); //忽略子进程结束的信号 ... 在这样的场景之下,我想实现这样的...

    关于linux c++守护进程调用调用system函数

    我们的程序是守护进程,也就是说在最开始会设置一些信号处理,比如说

    ...
    signal(SIGCHLD, SIG_IGN); //忽略子进程结束的信号
    ...

    在这样的场景之下,我想实现这样的一个功能:

    通过调用system函数来执行一些系统命令,并根据系统命令的返回值是不是0来判断命令是否执行成功(正常情况下调用system函数,执行成功 return 0; 执行失败 return 正数;)当我写下

    int ret = system("ls -a");
    std::cout<<"call system ret="<<ret<<std::endl;

    时发现始终 ret = -1 查看errno发现errno=10(errno.10 is: No child processes)

    进一步分析:

    system的实现大致是这样的:

    1)主进程fork一个子进程
    2)子进程调用exec函数去执行命令
    3)父进程调用waitpid来等来子进程结束

    也就是说在调用waitpid的时候子进程退出,父进程收不到他的退出信号只发现这个进程不在了,所以有errno=10 ret = -1
    具体原因:

    当父进程未调用wait系列函数等待子进程结束且未显示忽略SIGCHLD信号,则子进程将成为僵尸进程。如果忽略SIGCHLD信号,子进程不会成为僵尸进程,子进程结束后将会直接退出并释放资源,等父进程调用waitpid时发现pid进程不存在了

    解决办法:

    signal(SIGCHLD, SIG_DFL);
    int ret = system(cmd);
    signal(SIGCHLD, SIG_IGN);

    在调用system函数的时候按照默认方式处理SIGCHLD信号。

    深入探索

    system函数的内部实现是要阻塞SIGCHLD信号,原因是怕system的调用者在调用system函数之前有注册过SIGCHLD的信号处理函数,当产生SIGCHLD信号时system的调用者使用一种wait获取到子进程的终止状态,而system函数就无法获取子进程的终止状态(子进程的终止状态只能被获取一次)
    注意一点:不管有没有SIGCHLD信号通知,waitpid都可获取子进程的终止状态

    忽略SIGCHLD信号调用system的结果是errno=10 ret=-1,忽略SIGCHLD信号然后阻塞SIGCHLD信号并没有影响errno=10 ret=-1的结果,因为阻塞是暂时不接受这个信号,忽略是接受到这个信号后的一种处理方式

    关于TcpServer程序调用system函数的问题

    场景:我有一个tcp服务器假设它叫agent,它会监听一个端口(如8420)。它的工作是接受远程发过来的命令,来启动、停止一个或多个服务程序。这个处理命令的实现是通过system函数来实现的,比如说启动:system(“cd /home/user/xxxsvr; ./xxxsvr”)

    出现的问题:当agent收到命令并根据命令启动多个程序之后把agent关闭,他监听的端口8420并没有关闭,而是被agent启动的某个程序占用

    分析 : 还是system函数的实现。fork一个子进程会复制父进程的所有资源,包括文件描述符。

    解决的办法

    fcntl(listen_fd, F_SETFD, FD_CLOEXEC);

    FD_CLOEXEC标志用来控制在执行 exec 后,是否关闭对应的文件描述符

    展开全文
  • linux中,可以通过调用system函数执行linux命令,但是如何获取执行命令的结果状态呢,也就是是否执行成功。 #include #include int main() { int ret = -1; ret =system("cat /proc/mounts | grep sda"); ...


    在linux中,可以通过调用system函数执行linux命令,但是如何获取执行命令的结果状态呢,也就是是否执行成功。


    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int ret = -1;
    
    	ret =system("cat /proc/mounts | grep sda");
    	printf("\n ret = %d  ,\n WIFEXITED(ret) = %d,\n  WEXITSTATUS(ret)= %d \n",ret,WIFEXITED(ret),WEXITSTATUS(ret));
    	return 0;
    }
    





    1.下面解释一下system函数的原理

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


    system的实现

    int system(const char * cmdstring)
    {
      pid_t pid;
      int status;
    
      if(cmdstring == NULL){
          
          return (1);
      }
    
    
      if((pid = fork())<0){
    
            status = -1;
      }
      else if(pid == 0){
        execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
        -exit(127); //子进程正常执行则不会执行此语句
        }
      else{
            while(waitpid(pid, &status, 0) < 0){
              if(errno != EINTER){
                status = -1;
                break;
              }
            }
        }
        return status;
    }

    2.WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。


    WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。


    判断一个system函数调用shell脚本是否正常结束的方法应该是如下3个条件同时成立:
    (1)-1 != status
    (2)WIFEXITED(status)为真
    (3)0 == WEXITSTATUS(status)



    展开全文
  • linux system系统调用

    千次阅读 2018-12-26 12:47:02
    为了简化执行命令的复杂程度,Linux系统提供system系统调用,原理是通过fork的方式产生一个子进程,在这个子进程中执行系统调用过程中参数里面设定的command。 system函数 #include &lt;stdlib.h&gt; int...

    为了简化执行命令的复杂程度,Linux系统提供system系统调用,原理是通过fork的方式产生一个子进程,在这个子进程中执行系统调用过程中参数里面设定的command

    system函数

    1. #include <stdlib.h>
    2. int system(const char *command);

    功能:

    利用fork创建子进程,然后用execl来执行/bin/sh sh -c command指令。system函数的主进程必须等待子进程执行完后再退出,并返回执行状态。

    参数:
    command:需要执行的命令的字符串,比如需要查看当前目录下的文件信息,则将command设定为ls -l

    返回值:

    • 出现异常时返回-1

    • 子进程正常退出,返回0或者其他值。 

    实际上system()函数执行了三步操作:

    • fork一个子进程;

    • 在子进程中调用exec函数去执行command

    • 在父进程中调用wait等待子进程结束。对于fork失败,system()函数返回-1。如果exec执行成功,则返回command通过exitreturn返回的值。

    函数源码:

    int system(const char * cmdstring)
     {
         pid_t pid;
         int status;
         if(cmdstring == NULL){        
              return (1);
         }
         if((pid = fork())<0){
                 status = -1;
         }
         else if(pid == 0){
             execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
             _exit(127); //子进程正常执行则不会执行此语句
            }
         else{
                 while(waitpid(pid, &status, 0) < 0){
                     if(errno != EINTER){
                         status = -1;
                         break;
                     }
                 }
             }
             return status;
     }

    实例:

    编程要求

    在主函数的最开始会初始化一个全部变量g_i4event0

    本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

    • 执行“touch test.dat”命令;

    • 检查命令是否执行成功,如果执行成功,则将g_i4event设为1

    • 执行成功返回0,执行失败返回-1

    测试样例:

    测试输入:
    预期输出:
    touch ./test.dat successful!
    system command executed successful!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>  
    #include <unistd.h> 
    #include <signal.h>
    #include <pthread.h>
    #include <sys/types.h>
    #include <dirent.h>
    
    pthread_t pid;
    int g_i4event = 0;
    
    int do_system(void);
    
    int do_system(void)
    {
        /********Begin********/
    	if(system("touch test.dat")!=-1)
        {
            g_i4event=1;
            return 0;
        }
        return -1;
    	
    	
        /*********End*********/
    }
    
    void *detect(void *arg)
    {
    	int count = 0;
    	while (1)
    	{
    		if(access("./test.dat", F_OK))
    		{
    			count ++;
    		}
    	    switch(g_i4event)
    	    {
    	    	case 0:
    	    	    break;
    	    	case 1:
    				count ++;
    			    if(1 == count)
    				{
    					printf("system command executed successful!\n");
    				}  
    	    	    return NULL;
    	    	default:
    	    	    break;
    	    }
    	    g_i4event = 0;
    	    usleep(10 * 1000);
    	}
        return NULL;
    }
    
    int main(int argc, char *argv[])
    {
    	pthread_create(&pid, NULL, detect, NULL);
    	if(0 == do_system())
    	{
    		printf("touch ./test.dat successful!\n");
    	}
    	else
    	{
    		printf("touch ./test.dat failed!\n");
    	}
        pthread_join(pid, NULL);
    	
        return 0;
    }

     

    展开全文
  • This book is about writing software that makes the most effective use of the system you're running on --... The majority of both Unix and Linux code is still written at the system level, and Linux System
  • 转载 Linux system命令

    千次阅读 2019-03-29 12:53:53
    https://blog.csdn.net/fzy629442466/article/details/84787010
  • linux system 函数的实现源码

    千次阅读 2013-11-08 09:27:58
    system函数的实现源码,看到父进程是在子进程执行完成之后才继续往下走,否则一直挂在那等的子进程执行完。   int system(const char * cmdstring) {  pid_t pid;  int status;  if...
  • Linux system函数返回值

    万次阅读 多人点赞 2011-07-10 13:33:00
    例:status = system("./test.sh")...1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh
  • (1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值 (2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。 2、如何正确判断test....
  • linux system函数返回值详解(1)

    千次阅读 2013-10-14 18:12:42
    【C/C++】Linux下使用system()函数一定要谨慎 15人收藏此文章,我要收藏 发表于1年前(2012-04-15 00:35) , 已有14760次阅读 ,共3个评论 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数...
  • 这样在程序中,直接system调用的话,会出现只把-P 22分别给了s1,s2,怎么处理这个问题,让-P 22 /home/ 传给s1,/home传给s2? 解决方法: 使用system调用的话,必须使用字符串; 如下: char str[1
  • 例: ...status = system("./test.sh");...(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值 (2)shell返回值:指system所调用的shell命令的返回值,比如上例中
  • Linux System Programming中文版 Linux System Programming中文版 Linux System Programming中文版
  • linuxsystem函数详解

    千次阅读 2018-10-10 14:54:33
    一、system函数的简单介绍 头文件 #include &lt;stdlib.h&gt; 函数定义 int system(const char * string); 函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数...
  • Linux System Network Management Manual

    万次阅读 多人点赞 2018-05-06 00:35:10
    Linux System Network Management Manual
  • Linux 开启system log

    千次阅读 2020-01-13 17:22:54
    1.修改system配置文件 20-ufw.conf 配置的是防火墙log 50-default.conf 则是其他默认的log配置,我的配置如下所示,截出其中一部分 vi /etc/rsyslog.d/50-default.conf mail.* -/var/log/mail....
  • 在装 Fedora 11 的时候,到分割硬盘及格式化硬盘这步的时候,有几个选项,他们的意思及将执行的操作分别是:( 1 ...( 2 ) Replace exiting Linux system (替换掉现有的 Linux 系统)这个方案会删除硬盘上
  • Linuxsystem函数返回值详解

    千次阅读 2017-12-18 23:31:42
    描述system()库函数使用fork(2)创建一个子进程,该子进程使用execl(3)执行指定的shell命令, execl(“/bin/sh”, “sh”, “-c”, command, (char *) 0); 头文件system - execute a shell command #include <...
  • linux系统调用system()函数详解

    万次阅读 2018-03-28 14:12:11
    1、system()函数功能简介 int system(const char *command) system()函数调用/bin/sh来执行参数指定的命令,/bin/sh 一般是一个软连接,指向某个具体的shell,比如bash,-c选项是告诉shell从字符串command中...
  • linux c使用system调用shell脚本

    千次阅读 2017-08-05 12:48:47
    linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在返回值的低8位,使用WEXITSTATUS宏可以获得状态值。 3....
  • Linux System Log

    千次阅读 2015-01-13 07:52:08
    Overviewprintkklogdsyslogdmesgsyslog-ngConvert Timestamp ...Linux adopts a ring buffer in kernel with a size of __LOG_BUF_LEN bytes to store system logs, where __LOG_BUF_LEN equals (1
  • linux system函数使用详解

    万次阅读 2010-01-20 09:46:00
    相关函数fork,execve,waitpid,popen表头文件#i nclude定义函数int system(const char * string);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,...
  • Linuxsystem与popen函数

    千次阅读 2016-09-13 14:43:03
    Linux下使用system()函数一定要谨慎 linux尽量避免使用system。 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够...
  • Linux -- system、.(source)、exec的区别

    千次阅读 2019-02-28 17:52:46
    这两天在项目中需要一个功能:一个程序启动另外一个程序并且当前的程序退出,所以第一时间使用到了system函数,但是没有起到想要的效果,后来查阅资料,换成了exec函数实现了功能,在这里记录一下相关的知识点,权当...
  • Unix/LinuxSystem V、BSD、Posix概念

    万次阅读 多人点赞 2017-11-28 18:23:41
    1. System V和BSD  Unix操作系统在操作风格上主要分为System V和BSD(目前一般采用BSD的第4个版本SVR4),前者的代表的操作系统有Solaris操作系统,在Solaris1.X之前,Solaris采用的是BSD风格,2.x之后才投奔System ...
  • ![图片说明]...以上是代码图片。我想实现的功能是,在a文件中使用system函数调用b文件。运行结果显示找不到b这个文件。如果解决这个调用失败的问题。(我ab两个文件放在一个文件夹下)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 917,869
精华内容 367,147
关键字:

linuxsystem

linux 订阅