首页 > 系统相关 >linux 软件编程学习第八天 线程

linux 软件编程学习第八天 线程

时间:2024-08-07 21:23:56浏览次数:19  
标签:const 第八天 int pthread char 线程 linux 进程

进程

1.waitpid 
    pid_t waitpid(pid_t pid, int *wstatus, int options);
    功能:
        回收指定的子进程空间
    参数:
        pid:要回收的子进程的pid
        wstatus:回收状态的指针
        options:回收选项
            0 阻塞回收
            WNOHANG:非阻塞回收
    返回值:
        成功:返回回收的子进程的pid
        失败:返回-1

2.exec函数族:
    extern char **environ;
    int execl(const char *path, const char *arg, .../* (char  *) NULL */);
    int execlp(const char *file, const char *arg, .../* (char  *) NULL */);
    int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[] */);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
    int execvpe(const char *file, char *const argv[], char *const envp[]);
    功能:
        利用当前的进程空间执行另外一份代码

    l:参数以列表形式传递
    v:参数以指针数组形式传递
    p:在系统目录下查找文件 
    e:传递环境变量

    getenv
    char *getenv(const char *name);
    功能:
        根据环境变量的名字获得环境变量对应的值

    int setenv(const char *name, const char *value, int overwrite);
    功能:
        设置环境变量的值

3.system函数原型:
    int system(const char *command);
    功能:
        在代码中执行一条shell命令

线程
1.线程基本概念:

    线程是一个轻量级的进程
    1.线程的创建
        1.线程必须位于进程空间内部
        2.线程独享栈区,剩余的文本段、数据段、堆区与进程共享

    2.线程的调度
        和进程调度完全相同
        宏观并行,微观串行

    3.线程的消亡
        线程代码执行结束,空间不回收会成为僵尸线程,需要回收线程空间

2.进程和线程的区别:
    1.进程是操作系统资源分配的最小单元 
    2.线程是CPU任务调度的最小单元 

3.多进程和多线程的优缺点
    1.执行效率:
        多线程 > 多进程 
        多进程需要在不同的进程空间内部切换调度任务
        多线程只需要在同一进程空间内部切换调度任务

    2.安全性: 
        多进程 > 多线程 
        多进程一个进程任务异常结束不会影响其余任务 
        多线程一个线程任务异常结束可能导致进程异常结束,会导致进程中其余线程也随进程一起结束

    3.通信效率: 
        多线程 > 多进程 
        多线程全局变量共享,通信直接使用全局变量即可 
        多进程没有共享空间,通信需要使用其余的进程间通信方式完(管道、套接字、信号等)成
    
    4.编程复杂性: 
        多进程 > 多线程 
        多线程全局变量共享,通信简单但需要考虑资源竞争问题,需要引入互斥锁防止资源竞争
        多进程不用考虑资源竞争问题

    同一软件下的多任务考虑用多线程
    不同软件下的多任务考虑用多进程
    进程和线程实际效率差不多

4.线程相关的函数接口:
    fork    创建进程空间        创建线程 pthread_create 
    exit    退出进程            退出线程 pthread_exit 
    wait    回收进程空间        回收线程 pthread_join 

    1.pthread_create 
      int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);    
      功能:
        在进程中创建一个线程任务
      参数:
        thread:存放线程任务ID号空间首地址
        attr:线程属性 (默认属性 NULL)
        start_routine:线程任务函数
        arg:对线程函数的传参
      返回值:
        成功返回0 
        失败返回错误码

    gcc filename.c -lpthread 

    2.pthread_self 
      pthread_t pthread_self(void);
      功能:
        获得当前线程的ID号
      参数:
        缺省
      返回值:
        成功返回线程的ID号 
    
    3.pthread_exit 
      void pthread_exit(void *retval);
      功能:
        退出线程任务
      参数:
        retval:线程结束的状态
      返回值:
        缺省

    4.pthread_join 
      int pthread_join(pthread_t thread, void **retval);
      功能:
        回收线程任务
      参数:
        thread:要回收的线程ID号
        retval:存放线程结束状态的值的空间首地址
      返回值:
        成功返回0 
        失败返回错误码 

      注意:
        pthread_join具有阻塞功能,线程不结束,会阻塞等到直到线程结束回收线程空间
        pthread_join具有同步功能 

标签:const,第八天,int,pthread,char,线程,linux,进程
From: https://blog.csdn.net/mxyzhy/article/details/140999605

相关文章

  • Linux kill命令给进程发信号
    Linux系统中进程之间可以通过信号进行通信。kill命令可以通过进程ID(即PID)给进程发信号,格式示例如下。当直接使用“kill<pid>”命令时,默认发送SIGTERM信号。kill-<signal><pid>进程信号如下:信号名称值描述SIGHUP    1  Hangup(POSIX)         ......
  • 查看Linux某进程的物理内存大小
    如题,步骤如下1)ps命令查看某进程的PID2)通过/proc文件系统查看方法一查看/proc/[pid]/statm内存使用情况,以页为单位,每页4KB。每列含义分别为:虚拟内存、物理内存、共享内存、 文本、库、数据、脏页。$cat/proc/3092/statm1296470432201310上述结果表示PID=3092的......
  • linux内核裁剪 以及内核裁剪举例
    1.Linux内核裁剪介绍Linux内核裁剪是一个优化Linux系统性能和资源使用的过程,通过移除不必要的功能和驱动程序来减小内核大小。这对于嵌入式系统、特定用途的服务器或者想要提高系统性能的用户来说特别有用。以下是关于Linux内核裁剪的详细信息:1.裁剪的目的:  -减小内核......
  • 7 - Linux磁盘阵列RAID
    一、RAID磁盘阵列介绍RAID(RedundantArryofIndependent),中文简称为独立冗余磁盘阵列。把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的储存性能和提供数据备份技术。组成磁盘阵列的不同方式称为RAID级别(RAIDLevels)。常用的RAID......
  • Linux文件系统的一些基本概念
    Linux文件系统简介在Linux操作系统中,一切被操作系统管理的资源,如磁盘驱动器、打印机、普通文件或目录等,都被视为文件进行管理和访问。在Linux系统中,“一切都是文件”。Linux系统可以通过统一的文件接口来管理和操作不同类型的资源。Linux可以使用类似于读写文件的方......
  • springboot的jar在linux上sh启动脚本
     java在linux上start、stop、restart、status等启动命令,sh脚本,appMgr.sh放在reources/ops下#!/usr/bin/shAPP_NAME="@project.name@[email protected]@.jar"DEPLOY_PATH=`pwd`#JVM启动参数1JVM_PARAMS="-Dfastjson.parser.safeMode=true"command=$1#nohup......
  • Java并发编程——线程创建的4种常见方式
    文章目录一、继承Thread类创建创建线程类1.1Thread类解析1.2使用方法1.3优缺点二、实现Runable接口创建线程类2.1Runable接口解析2.2使用方法2.3优缺点三、使用Callable和FutureTask创建线程3.1Callable接口解析3.2RunnableFuture接口解析3.3Futu......
  • Linux 环境下为VirtualBox安装增强功能
    csdn搬家VirtualBox安装CentOS后,再安装增强功能就可以共享文件夹、粘贴板以及鼠标无缝移动,主要步骤如下:1、yum-yupdate2、yum-yinstallg++gccgcc-c++makekernel-*#主要是在安装增强工具提示没有安装这些软件3、yum-yinstallbzip2*......
  • linux查看防火墙状态
    原文:https://www.zhihu.com/tardis/zm/art/447288815?source_id=1005inux查看防火墙状态的方法:一、iptables防火墙1、基本操作#查看防火墙状态serviceiptablesstatus#停止防火墙serviceiptablesstop#启动防火墙serviceiptablesstart#重启防火墙servic......
  • Linux系统安装ComfyUI
    环境:Ubuntu22.04.1LTS+  NVIDIAGeForceRTX3090一、安装显卡驱动 访问NVIDIA官方网站(https://developer.nvidia.com/cuda-downloads)获取对应安装命令https://developer.nvidia.com/cuda-downloads安装完成后执行nvidia-smi检测安装是否成功二、安装Miniconda......