IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 进程部分命令和函数简介 -> 正文阅读

[系统运维]进程部分命令和函数简介

进程相关命令

ps

ps -ef #可以显示当前所有进程的简要信息

可以配合管道符 <|> 加上 more 或者 grep 来使用
在这里插入图片描述

ps aux #可以显示进程的运行状态

在这里插入图片描述

top

可以查看进程动态信息,并且可以查看进程的CPU和内存占用率
在这里插入图片描述

/proc

可以到 /proc 目录下查看目前进程的详细信息
在这里插入图片描述

niec 按指导的优先级运行程序

在 top 命令中 NI 代表优先级
普通用户创建的进程优先级默认为 0 ,优先级的范围 -20~19 ,普通用户只能指定0 ~ 19
在这里插入图片描述
通过 nice 指定进程优先级
在这里插入图片描述

renice 改变正在运行的进程的优先级

在这里插入图片描述

jobs 查看后台进程

可以通过 Ctrl z 来将前台的进程挂起到后台
在这里插入图片描述

bg 可以将挂起的进程在后台运行

在这里插入图片描述

fg 把后台的进程放前台运行

在这里插入图片描述

进程的一些函数

fork进程创建

在这里插入图片描述
fork()函数通过系统调用创建一个与当前进程几乎完全相同的进程,分别称为父进程和子进程,父子进程可以做相同的事情,也可以分别执行自己独特的命令。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

失败返回 -1
成功时 父进程返回子进程的进程号,子进程返回0

#include <stdio.h>
#include <unistd.h>

int main()
{
    pid_t fpid;
    if((fpid = fork()) < 0){
        perror("fork");
        return -1;
    }
    else if (fpid > 0){
        printf("我是父进程,进程号 :%d\n",getpid());
    }
    else{
        printf("我是子进程,进程号 :%d\n",getpid());
    }
    printf("Hello , Word!\n");
    return 0;
}

执行结果
在这里插入图片描述
父子进程

  • 子进程继承了父进程的内容
  • 父子进程有独立的空间,互不影响
  • 若父进程先结束
    • 子进程变成了孤儿进程,被init进程收养
    • 子进程变成后台进程
  • 若子进程先结束
    • 父进程如果没有及时回收,子进程变成僵尸进程

fork出错可能有两种原因:
1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM。

exit/_exit 进程结束

在这里插入图片描述
在这里插入图片描述

  • 结束当前的进程并将status返回
  • exit结束时会刷新缓冲区,_exit则不会

exec 函数族

在这里插入图片描述

execl/execlp

  • 成功时执行指定程序 , 失败返回 -1(EOF)
  • path 执行程序名称,包括路径
  • file 执行程序名称,在默认PATH中查找
execl("/bin/ps", "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL);
execlp("ps", "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL);

execv/execvp

  • 成功时执行指定程序 , 失败返回 -1(EOF)
  • argv[ ] 程序名称和执行的参数
char *const ps_argv[] = {"ps", "-o", "pid, ppid, session, tpgid, comm, NULL"};
execv("/bin/ps", ps_argv);
execvp("ps", ps_argv);

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
  //以NULL结尾的字符串数组的指针,适合包含v的exec函数参数
  char *arg[] = {"ls", "-a", NULL};
  
  /**
   * 创建子进程并调用函数execl
   * execl 中希望接收以逗号分隔的参数列表,并以NULL指针为结束标志
   */
  if( fork() == 0 )
  {
    // in clild 
    printf( "1------------execl------------\n" );
    if( execl( "/bin/ls", "ls","-a", NULL ) == -1 )
    {
      perror( "execl error " );
      exit(1);
    }
  }
  sleep(1);
  /**
   *创建子进程并调用函数execv
   *execv中希望接收一个以NULL结尾的字符串数组的指针
   */
  if( fork() == 0 )
  {
    // in child 
    printf("2------------execv------------\n");
    if( execv( "/bin/ls",arg) < 0)
    {
      perror("execv error ");
      exit(1);
    }
  }
  sleep(1);
  /**
   *创建子进程并调用 execlp
   *execlp中
   *l希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
   *p是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
   */
  if( fork() == 0 )
  {
    // in clhild 
    printf("3------------execlp------------\n");
    if( execlp( "ls", "ls", "-a", NULL ) < 0 )
    {
      perror( "execlp error " );
      exit(1);
    }
  }
  sleep(1);
  /**
   *创建子里程并调用execvp
   *v 望接收到一个以NULL结尾的字符串数组的指针
   *p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
   */
  if( fork() == 0 )
  {
    printf("4------------execvp------------\n");
    if( execvp( "ls", arg ) < 0 )
    {
      perror( "execvp error " );
      exit( 1 );
    }
  }
 sleep(1);
 return 0;
}

在这里插入图片描述

system

  • 成功后返回命令的返回值,失败返回-1
  • 阻塞执行
int system(const char * command)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>


int main()
{
    system("ls -al /");
    return 0;
}

wait 进程回收

pid_t wait(int *status)

进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:32:30  更:2022-04-01 00:34:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:28:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码