#include <semaphore.h>int main(void) {int pfds[2];char buff[20];sem_t sem;sem_init(&sem, 1, 1);pipe(pfds);if (!fork()) {printf("Child: Waiting to acquire semaphore\n");sem_wait(&sem);printf("child acquires lock\n");sleep(5);write(pfds[1], "Hello", 6); /* make stdout same as pfds[1] */close(pfds[0]); /* we don't need this */printf("child releases lock\n");sem_post(&sem);}else {printf("Parent: Wai...
说明 线程是如何创建,进程是如何创建的。 TCB基础知识 TCB主要是任务管理和group管理的内容task_group_s task_group_s {进程id 组id 信号资源 消息队列 文件句柄 soket句柄 }struct tcb_s struct tcb_s {任务的基本信息,名字 wait信号量 信号部分 }一共3种类型的TCBdefine TCB_FLAG_TTYPE_TASK (0 << TCB_FLAG_TTYPE_SHIFT) /* Normal user task */ define TCB_FLAG_TTYPE_PTHREAD (1 << TCB_FLAG_TTYPE_SHIFT) /* User...
进程间通信的方式有管道、信号、信息量、消息队列、共享内存、套接字 1)管道:无名管道和有名管道 无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无名管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。 有名管道也是...
进程的起源程序就是一个指令序列 在程序执行的过程中,需要将其放入内存中之后才会被CPU所处理。早期的计算机中只支持单道程序,所以计算机中的所有资源都只被这一个程序所享有,包括内存。所以内存只供当前运行的程序所使用。内存被划分为程序段和数据段,程序段用于存放程序代码,数据段则用于存放程序中的数据。因为只有一个程序,所以很容易就能在内存中找到相应的程序段和内存段 然而随着计算机的发展,开始运行多道程序,即同...
0.shell进程替换的用法 1.使用进程替换的必要性 2.进程替换的本质 进程替换和命令替换非常相似。命令替换是把一个命令的输出结果赋值给另一个变量,例如dir_files=`ls -l`或date_time=$(date);而进程替换则是把一个命令的输出结果传递给另一个(组)命令。 0.shell进程替换的用法写法含义注意点本质<(commands)它借助于输入重定向,可以将它的输出结果作为另一个命令的输入commands 是一组命令列表,多个命令之间以分号;分隔。 注...
一,背景知识进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。所以想要真正了解进程,必须事先了解操作系统,点击进入 PS:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。将一个单独的cpu变成多个虚拟的cpu(多道技术...
本节是操作系统系列教程的第二篇文章,属于操作系统第一章即基础篇,在真正开始操作系统相关章节前在这一部分回顾一些重要的主题,算是温故知新吧,以下是正文。 到目前为止,你肯定已经见过很多次这两个词了,“程序”“进程”。那程序和进程到底有什么区别呢。 程序是一个静态的概念。 进程是一个动态的概念。 我们用一个例子来形象的讲解一下这个区别。程序其实本质上和我们的菜谱非常类似,一个菜谱规定了完成一道菜的整个流程...
目录进程管理命令-ps进程管理命令-top什么是中断kill 信号管理进程优先级后台进程管理 进程管理命令-ps ## ps aux a:查看所有的终端进程 x:查看所有的非终端进程 u:显示进程的用户 f:查看子进程 [root@qls ~]# ps auxf|grep nginx o:自定义查看想要看的字段 [root@qls ~]# ps axo user,pid,%cpu,%mem,command --sort:排序,可以根据ps的所有字段 [root@zls ~]# ps aux --sort %cpu## 查看pid的额外命令 [root@qls ~]# pgrep ...
oracle 10服务一启动 TNSLSNR.exe 会占用8080端口,我们知道tomcat的默认端口也是8080,这时,需要改一下端口: 用oracle提供的包: -- 把HTTP/WEBDAV端口从8080改到8081 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), /xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text(),8081)) / -- 把FTP端口从2100改到2111 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), /xdbconfig/sysconfig/...
进程: 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作), 而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。 是不是在程序A读取数据的过程中,让程序B去执行,当程序A读取完数据之后,让 程序B暂停,然后让程序A继续执行? 当然没问题,但这里有一个关键词:切换 既然是切换,那么这就涉及到了状态的保存,状态的恢复,加上程序A与程序B所需要的...
Java 9 这个版本对进程管理方面的改进也是相当大的。在为数不多的几次 Java 项目中,有偶尔用到多线程,但对多进程和进程方面的了解还真是太少。 我想,大部分人应该跟我一样,在编程之外知道有进程的东西的存在,在 Java 中反而会忽视,因为多线程和并发 ( Concurrency ) 的存在感更强吧。 这次 Java 9 对进程管理的改进主要是提供了 ProcessHandle 类 ProcessHandle 类 该类在 java.lang 包中,且处于 java.base 模块中。 Proces...
背景 在启动dpdk多进程实例的时候,发现两个进程相互切换启动时,有一个进程必报无法申请足够的连续的大页数,导致dpdk主进程启动失败。 需求: 解决dpdk无法申请足够的连续大页数,让两个进程切换时都可以正常启动。 解决方案: 1:首先整理一套干净的环境。即重启服务器即可,因为一般情况下配置的大页数据都是临时的,不具备永久性。如果需要配置永久性的大页,需要在启动项的grub里配置,具体博友们可以自行查阅资料。 2:查看...
umount时目标忙解决办法标签(空格分隔): ceph ceph运维 osd在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利umount了。 [root@node2 ~]# umount /var/lib/ceph/osd/ceph-1 umount: /var/lib/ceph/osd/ceph-1:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)[root@node2 ~]# fuser -mv /var/lib/ceph/osd/ceph-1用户 进程号 权...
要将一个命令放到后台执行,我们一般使用nohup sh command &为什么要nohup?因为我用使用Scrt这种终端工具退出的时候会向我们在当前shell下启动的进程发生一个SIGHUP信号,而SIGHUP信号的默认行为时终止进程,所以nohup的意思是屏蔽SIGHUP信号。下面我们做一个测试:在一个窗口运行一个不带nohup的后台程序 [root@limt ~]# sh Testlsof.sh > 111.log & [1] 4486 [root@limt ~]# jobs [1]+ Running sh Testlsof.s...
本章小结程序的运行是通过进程来完成的,在层次的结构操作系统中,进程不但是系统分配资源的基本单位,而且是CPU调度的基本单位,进程管理是操作系统的最主要功能之一。 习题 一、试对程序、进程、线程的概念和功能进行比较。进程的定义:是在自身的虚拟地址空间运行的一个单独的程序 程序的定义:程序是静态的,具有不能独立运行的异步特征的程序 线程的定义:是进程中执行运算单位最小单位,亦即执行处理机调度的基本点位。进程与...