首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程概念(四.main函数的参数、环境变量及其相关操作)

上次讲了:Linux进程概念(三.详解进程进程状态、优先级、进程切换调度) 1main()函数的参数 在编写C/C++代码,我们通常都不会写main()函数的参数,但是在Linux下,main函数是可以带参数的...main() 函数是 C 和 C++ 程序中的入口函数,通常用于表示程序的起始点。...在 C 和 C++ 中,main() 函数可以有两种不同的形式: 在标准的 C 语言中,main() 函数通常定义为: int main(void) //我们一般什么都不写 { // 函数体...在一些特定的环境中(如 UNIX/Linux 系统),main() 函数也可以带有两个参数,用于传递命令行参数: int main(int argc, char *argv[]) { // 函数体...显然子进程也有环境变量 所以环境变量有全局属性,可以被所有子进程继承下去 使用getenv()函数获取单个环境变量(最常用) getenv 函数用于获取指定环境变量的值。

11600

Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

文章目录 一、进程状态 二、进程创建 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一、进程状态 ---- Linux...Linux进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ; 二、进程创建 ---- 进程创建...源码 ) 博客中的 fork() , vfork() , clone() 等系统调用函数 ; 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程...| 执行异常退出 ) ---- 进程终止的方式 : 主动退出 : 主动调用 exit() 系统调用函数 主动退出 ; 自动退出 : 程序的 main 函数返回 , 自动退出 ; 从 main() 函数返回时...自己不能处理的信号 , 被迫终止 ; 前两种是 进程主动退出 , 后两种是 进程被动退出 ; exit() 系统调用 函数 , 定义在 linux-5.6.18\kernel\exit.c 源码中 ,

2.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从创建进程到进入main函数,发生了什么?

    前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的? 今天这篇文章就来聊聊这个话题。...所以这里就重点关注C/C++这类native语言的main函数是如何进入的。 ? 本文会兼顾叙述Linux和Windows两个主要平台上的详细流程。 创建进程 第一步,创建进程。...在Linux上,我们要启动一个新的进程,一般通过fork + exec系列函数来实现,前者将当前进程“分叉”出一个孪生子进程,后者负责替换这个子进程的执行文件,来执行子进程的新程序文件。...这后面和Linux上的机制类似,同样没有直接到main函数,而是需要先进行C/C++运行时库的初始化,这之后经过运行时函数的包装,才最终来到我们的main函数。...现在你清楚,从进程启动是怎么一步步到你的main函数的了吗? ?

    1.4K30

    Linux进程——Linux进程进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...我们创建进程为的就是让他完成某种任务,但是我们该如何知道它是否成功完成,因此在进程退出时,需返回一些退出信息来表明任务得完成情况 比如: 我们之前所学习得main都要有return 0,这也是返回退出信息的一种...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...为什么说这两个优先级有关?...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级前面内容相差较大,希望大家能够多花点时间理解!

    10010

    main函数命令行参数

    main 函数的概念 C语言中 main 函数称之为主函数 一个C程序是从 main 函数开始执行的 main函数的本质 main 函数是操作系统调用的函数 操作系统总是将 main 函数作为应用程序的开始...操作系统将 main 函数的返回值作为程序的退出状态 main 函数的参数 执行程序时,可以从命令行传值给C程序。...int main(int argc,char *argv[]) argc:命令行参数个数(不给main()函数传递参数时默认值为1,即至少有一个参数为该可执行文件的文件名(含目录)) argv:命令行参数数组...如何修改main函数的命令行参数 第一种是,创建一个快捷方式然后,在目标后面加入要加的参数 用空格隔开 第二种是用命令行 打开cmd然后输入软件路径名 +参数 遍历main参数 #include... #include int main(int argc, char* argv[]) { printf("%d\n", argc); for (size_t

    37710

    linux 进程管理相关函数

    对于linux 函数可以通过命令行指令: man 函数名,查看函数相关信息 //返回当前进程的pid getpid(); //创建一个进程, //当执行完这行代码后, //将会有两个进制执行下面的代码..., //不同的是,父进程pid大于0,子进程pid=0 //同时运行 fork(); //和fork()类似 //但是这里子进程先运行, //结束后,运行父进程 vfork() //exec将一个新程序载入到...*当前的进程中, //调用的进程将被覆盖, //即代表execl()执行后,下面的代码就不执行了 //exec这里只是代表这一系列执行的函数,不同文件有不同的执行函数 //如:execl,execv,execle.execve.execlp...//阻塞调用父进程,等待一个子进程终止后, //父进程执行wait后的代码 wait(); //使用在调度进程关心某个进程的结束情况时 //参数1 所等待的进程进程组pid //参数2 进程返回的状态...//参数3 WNOHANG 如果没有子进程退出就立即返回 WUNTRACED 对已经停止但本不用报告状态的子进程,该调用也从等待中返回并报告状态 //该函数具体解析 链接请转 https://blog.csdn.net

    66110

    linux进程创建进程终止

    要知道子进程退出的情况(成功,失败,失败的原因是什么?) 进程结束时,可以通过 return 语句(在函数中)或 exit() 函数(直接从程序中)指定一个退出码。...如何终止 正常退出: main函数return,表示进程终止(非main函数,return,函数结束) 代码调用exit函数,注意:我们代码的任意位置调用exit,都表示进程退出 _exit(),系统调用...理解这些区别有助于正确地管理程序的终止过程,特别是在涉及资源清理和子进程管理时。 exit() exit() 函数是由 C 标准库提供的,用于结束程序。...执行 atexit() 注册的函数:如果程序中使用了 atexit() 注册了任何终止时执行的函数,exit() 会在实际终止进程前按注册的逆序调用这些函数。...return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数

    9310

    Linux进程概念进程状态

    () 来获取进程id和父进程id (进程ID是一个进程的唯一标识): 注:关于函数的返回值 pid_t,大家把它当作 int 看待即可,打印的时候也使用 %d; //test.c #include <...getpid() 和 getppid() 函数得到的值的确是我们进程对应的id;同时,我们发现 test 进程的父进程是 bash,即 shell 外壳,这也侧面证实了我们在 【Linux】权限管理...,所以我们需要指定优先级来合理的分配资源; Linux中优先级的特点 Linux 中优先级的表示维护通过两个变量 PRI (priority) 和 NI (nice) 来完成,每个进程默认的 PRI...都是 80,NI 都是 0;我们可以通过修改 NI 的值来调整进程的优先级,NI 的改动范围为 [-20, 19];PRI NI 的和越小,进程的优先级就越高; Linux 中我们通过 ps -l...上下文保护上下文恢复 CPU在进行进程切换时要进行上下文保护上下文恢复: 我们的进程在运行时会产生非常多的临时数据,同时CPU中存在一套寄存器硬件,当进程运行时,进程的PCB会被放入CPU内的寄存器中

    5.6K00

    main函数,printf函数,和库函数

    main函数,printf函数和库函数 在C语言的入门学习中,细心的朋友们可以发现,一个C语言程序无论有多长,都有一个main函数;而在代码中想要输出结果,就需要用到printf函数;print函数其实就是一个库函数...接下来,我们就main函数,printf函数和库函数展开讲解。...main函数 main函数也被叫做主函数,所有代码都是从main函数开始执行的,main函数时一个程序的入口,main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类型的值。...; return 0;//前面main函数相互对应 } 代码中main函数的几个需要注意的点 1.main函数是程序的⼊⼝ 2.main函数有且仅有⼀个 3.虽然⼀个项⽬中可以有多个.c⽂件,但是只能有...⼀个main函数 在写代码中,也会出现一些小问题,大家也得注意,例如:main后面的()必须是英文的()、main()后面必须加封号,大家都需要注意细心。

    12210

    嵌入式Linuxmain函数的使用方法

    和单片机开发一样,在Linux中,C语言程序的执行通常从main函数开始。main函数是程序的入口点,当程序启动时,操作系统会调用main函数来执行程序的主要逻辑。...不同于单片机开发,通常设置main函数没有参数,Linux开发中main函数有两种形式:一种是不带参数,另一种是带参数。无论使用哪种形式,都需要返回一个整数值,通常用于表示程序的退出状态。...以下是关于main函数的一些基本使用方法: #include // 主函数的声明,可以有两种形式 // 1....不带参数 int main() { return 0; // 返回0表示程序正常结束 } // 2....*argv[]) { return 0; } 重点说一下带参数的main函数形式,实际应用中可以接收命令行参数。

    10500

    Linux进程间关系守护进程

    --- 乌龟大师 《功夫熊猫》--- 进程间关系守护进程 1 进程组 2 会话 3 控制终端 4 作业控制 5 守护进程 1 进程组 之前我们提到了进程的概念, 其实每一个进程除了有一个进程 ID...同样的通过fork创建的父子进程也是属于同一个进程组: #include #include #include int main(...通常我们都是使用管道将几个进程编成一个进程组 可以调用 setseid 函数来创建一个会话, 前提是调用进程不能是一个进程组的组长。...我们在下边详细介绍一下: 一个会话可以有一个控制终端, 通常会话首进程打开一个终端(终端设备或伪终端设备) 后, 该终端就成为该会话的控制终端。 建立控制终端连接的会话首进程被称为控制进程。...4 作业控制 作业在Linux环境中,是指为完成用户指定任务而启动的一组进程。一个作业可能仅包含单一进程,也可能由多个相互协作的进程构成,这些进程通常通过管道机制进行通信。

    12010

    linux系统编程之进程(四):waitwaitpid函数僵尸进程、fork 2 times

    函数原型 pid_t wait(int *status) 函数参数 status:该参数可以获得你等待子进程的信息 返回值: 成功等待子进程,  函数返回等待子进程的ID wait系统调用会使父进程暂停执行...返回的是子进程的PID,它通常是结束的子进程 状态信息允许父进程判定子进程的退出状态,即从子进程main函数返回的值或子进程中exit语句的退出码。...于是在这一功能方面waitpidwait等效。 pid > 0 等待其进程I Dp i d相等的子进程。 pid == 0 等待其组I D等于调用进程的组I D的任一子进程。...换句话说是调用者进程同在一个组的进程。 pid < -1 等待其组I D等于p i d的绝对值的任一子进程。...stopped signal number=%d\n", WSTOPSIG(status));     return 0; } 输出为: simba@ubuntu:~/Documents/code/linux_programming

    3.3K70

    Linux进程控制】五、wait()函数——子进程回收

    僵尸进程孤儿进程 孤儿进程:父进程结束,子进程被init进程收养。 僵尸进程:子进程结束,父进程没有回收子进程的资源(PCB),这个资源必须要由父进程回收,否则就形成僵尸进程。...2. wait()函数waitpid()函数 2.1 wait()函数 一个进程在终止的时候会关闭所有的文件描述符,释放在用户空间分配的内存,但是它的PID还保留着,内核在其中保存了一些信息:如果进程是正常终止则保存进程退出状态...父进程调用wait()函数可以回收子进程终止信息,wait()函数功能主要有三个:阻塞等待子进程退出;回收子进程残留资源;获取子进程退出状态(退出原因)。...回收多个子进程 上面使用wait()函数和waitpid()函数举的例子都是回收一个子进程,有时候我们可能需要回收多个子进程,下面介绍回收多个子进程的方法。...3.2 使用waitpid()回收多个子进程 如果使用waitpid()函数,可以借助函数的参数和返回值去判断每个子进程是否回收成功。

    8310

    linux进程进程间通信_linux共享内存进程间通信

    内存共享最新整理: Linux进程间通信-共享内存 – 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式 https://www.codecomeon.com/posts...二、相关函数信号量一样,在Linux中也提供了一组函数接口用于使用共享内存,而且使用共享共存的接口还与信号量的非常相似,而且比使用信号量的接口来得简单。...shmget函数成功时返回一个key相关的共享内存标识符(非负整数),用于后续的共享内存函数。调用失败返回-1....2.第二个参数,size以字节为单位指定需要共享的内存容量 3.第三个参数,shmflg是权限标志,它的作用open函数的mode参数一样,如果要想在key标识的共享内存不存在时,创建它的话,可以...共享内存的权限标志文件的读写权限一样,举例来说,0644,它表示允许一个进程创建的共享内存被内存创建者所拥有的进程向共享内存读取和写入数据,同时其他用户创建的进程只能读取共 享内存。

    4.5K30

    Linux进程理解学习(Ⅰ)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构操作系统 ---- 进程概念...所谓的 先描述实际上是指 OS会用一个 特定的结构体( PCB/task_struct)来 提取该进程的各种属性(这里的属性加载到内存中的数据代码无关,或者说仅仅只有一点点的关系...而PCB就是用来描述进程的一种特定结构体。在Linux系统下的PCB就是task_struct。...我们可以验证一下,当然,在此之前我们要先谈一下PPID,PPID就是当前进程的父进程的pid。 fork创建子进程 我们也可以通过系统调用函数fork用来给当前进程创建子进程。...实际上,我们在函数的最后有一个return 0,而fork之后的代码是父子进程共享的,也就是说,return这个语句被执行了两次,并且当return执行时,函数体内部是已经执行完了的。

    51950

    Linux进程理解学习(Ⅱ)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】 相关文章推荐: 【Linux】冯.诺依曼体系结构操作系统 【Linux进程理解学习...本次章节目标就是对进程的不同状态做相关介绍深入了解。 ps -lA查看系统下的所有进程(部分) 阻塞挂起 阻塞 在了解进程状态之前,我们先来谈一谈阻塞挂起的两个概念。...我们前文已经了解了,进程=内核数据结构(pcb)+进程的代码数据。...僵尸状态(Z) 返回代码 我们每一个进程结束时都会有一个退出码,就好像我们写一个main函数时,最后都会加上return 0,return 0就表示该进程正常返回(事实上就算我们不写return 0,系统也会默认...(Linux下可以通过echo $?

    59230
    领券