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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux进程控制 -> 正文阅读

[系统运维]Linux进程控制

Linux常用进程控制命令

这里仅简单介绍命令及基本功能,详细信息请自行利用man命令进行查询。

命令名功能
ps查看系统中的进程
-A 列出所有进程
-aux 显示所有进程较详细的信息(包括没有控制终端的进程),所含信息为:
USER PID %CPU %MEM VSZ(占用的虚拟内存大小) RSS(占用的实际内存大小) TTY(终端设备编号) STAT(进程状态) START TIME(运行时间) COMMAND(执行的命令)
top动态显示系统中的进程
nice按照指定的优先级运行命令(优先级越高的进程获取的cpu资源就越多)
renice改变正在运行进程的优先级
kill向进程发送信号,一般用于终止进程,如:kill -9 pid(彻底杀死进程)

进程相关函数

getpid、getppid

函数名getpid
头文件#include<unistd.h>
函数原型pid_t getpid(void)
返回值当前进程的进程号
函数名getppid
头文件#include<unistd.h>
函数原型pid_t getppid(void)
返回值当前进程的父进程号

sleep

函数名sleep
头文件#include<unistd.h>
功能让进程休眠一段时间
函数原型unsigned int sleep(unsigned int seconds)
传入值说明单位为秒
返回值成功返回0,中途被唤醒则返回剩余的秒数

fork

函数名fork
头文件#include<unistd.h>
功能建立一个新的进程
函数原型pid_t fork(void)
返回值子进程返回0,父进程返回子进程的pid
备注新的进程和父进程共享代码片段和变量,但是变量只有在被使用的时候才会进行复制,并且父子进程的变量不会同步。在子进程中,只有产生子进程的那个fork()会返回一个0,但是只有产生子进程的fork之后的fork才会产生新的进程。

下面这段代码一共产生了四个进程。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
    int res1 = fork();
    int res2 = fork();
    printf("当前进程的pid为:%d,父进程的pid为:%d,res1=%d,res2=%d\n", getpid(), getppid(), res1, res2);
    sleep(1);
    return 0;
}

下面是运行结果,可以看到第一个fork产生的子进程中第二个fork是正常运行的,但是第二个fork产生的子进程中两个fork都不会产生新的进程。
在这里插入图片描述

exec函数族

函数名exec函数族
头文件#include<unistd.h>
功能用一个新的进程替代当前进程,pid不变
函数原型int execl(const char *path, const char *arg, …)
int execv(const char *path, char const *argv[], …)
int execle(const char *path, const char *arg, …, char *const envp[])
int execve(const char *path, char const *argv[], char *const envp[])
int execlp(const char *file, const char *arg, …)
int execvp(const char *file,char const *argv[])
返回值失败返回-1,如果成功了是不会接收到返回值的(因为当前进程被新的进程替代了)
备注函数最后的字符l、v、e、p分别表示:
l:列表传递方式
v:字符指针数组传递方式
e:可指定环境变量
p:路径自动搜索功能(可以不用输入完整的路径名)
//execl函数使用举例
#include <stdio.h>
#include <unistd.h>

int main()
{
    execl("/bin/ls", "ls", "-l", 0);
    perror("调用ls失败\n"); //如果execl调用成功了就不会执行这一步
    return 0;
}

运行截图
在这里插入图片描述

exit

函数名exit
头文件#include<unistd.h>
功能正常终止进程
函数原型void exit(int status)
备注正常终止进程,并将参数status返回给父进程,终止前会将缓冲区内的数据写回未关闭的文件中。
函数名_exit
头文件#include<unistd.h>
功能正常终止进程
函数原型void _exit(int status)
备注立刻终止进程,并将参数status返回给父进程,但不会处理IO缓冲区,因此不建议使用

wait、waitpid

函数名wait
头文件#include<sys/types.h>
#include<sys/wait.h>
功能阻塞当前进程直到子进程中断或结束
函数原型pid_t wait(int *status)
传入值说明如果不是NULL,会将子进程退出时的状态存入status,注意并不是子进程的返回值
返回值成功返回子进程的pid,有错误返回-1
函数名waitpid
头文件#include<sys/types.h>
#include<sys/wait.h>
功能阻塞当前进程直到子进程中断或结束
函数原型pid_t waitpid(pid_t pid, int *status, int options)
传入值说明pid:子进程号
status:子进程结束状态
options可以为0或以下组合:
WNOHANG:如果没有任何已终止的子进程则马上返回,不予等待
WUNTRACED:如果子进程进入暂停执行则马上返回,但对终止状态不予理会
返回值成功返回子进程的pid,有错误返回-1

setsid

函数名setsid
头文件#include<sys/types.h>
#include<unistd.h>
功能设置新的组进程号(使当前进程脱离终端和父进程的控制,一般用于守护进程)
函数原型pid_t setsid(void)
返回值成功返回子组进程号GID,有错误返回-1
备注使用setsid产生守护进程的步骤一般为父进程先fork一个子进程,然后父进程结束进程,子进程调用setsid成为守护进程,修改工作目录(防止因为当前目录被删除导致守护进程退出),修改权限掩码,此时关闭终端也不会结束子进程。

下面的程序在运行后会在一分钟内每隔一秒向所有终端广播hello,即使退出了终端也会继续运行。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

int main()
{
    pid_t res = fork();
    if (res > 0)
        exit(0);
    else if (res == 0)
    {
        setsid();
        chdir("/tmp");
        umask(0);
        //在接下来的60秒内每秒都向所有终端广播hello
        int cnt = 60;
        while (cnt--)
        {
            system("wall hello");
            sleep(1);
        }
    }
    return 0;
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:33:28  更:2022-06-06 17:33:45 
 
开发: 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 13:45:07-

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