linux程序设计,启动新进程、线程的方式,以及进程间的通信方式

本文介绍了Linux下启动新进程和线程的方式,包括system、execl函数及其变体,以及wait和waitpid用于进程通信。接着详细探讨了信号处理,如SIGKILL和SIGSTOP不可捕获。线程创建使用pthread_create,线程间同步通过信号量和互斥量实现。最后讲解了进程间通信的管道机制,包括popen、pipe、fifo等方法。
摘要由CSDN通过智能技术生成

前言

进程和线程,我在本科学习的时候就常常会听到大家谈论的时候说起来。我也很清楚一个进程可以由很多个线程。程序同样可以有很多个进程,等等巴拉巴拉一堆的。不过鉴于我本科的时候专心拉加权,无心代码,所以这么基础的玩意我一直都没有亲手实现过。。

好吧,现在终于到了彻底弄明白这些问题的时候了。并且,不仅仅是创立几个线程或者进程这么简单,我还要学习他们之间的通信方式。

第11章:进程和信号

首先第一个启动新进程的方式是通过system函数。

int system(const char *string)

等同于在shell命令行中输入如下命令

sh -c string
其实也就是启动了一个新的shell,字符串指针里放要执行的命令就行了。并且如果输入的命令不带有符号 &(即在后台运行),那么程序会在system调用这一行阻塞。因此这样的建立新进程的方式不太合适。

第二种方式

使用execl函数,该函数一共有6种变体

execl   execlp   execle
execv  execvp   execve
第一行是通过list参数来实现,所以末尾用使用 l, 第二种使用字符串数组来代替list参数。显得更加的简洁。不过需要自己建立参数字符串数组。如果要列出运行程序的路径,使用带p的,如果要加入环境参数,使用带e的函数。总之这个函数能够做到非常细致的配置。十分好用。

在程序中调用此函数时,原来的进程就会被替换掉了。所以execl函数后面的代码都不会继续运行了。

我在调用这个函数的时候我尝试给它加上&后运行的参数,但是程序报错,暂时没有找到别的方法,不过要实现这个功能可以通过system函数。


为了实现保留原有进程,并且开启一个新的进程,我们需要用到另一个函数了

fork()
fork函数的返回值是pid_t型的变量࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值