
linux
文章平均质量分 86
oguro
无
展开
-
Linux top命令的用法详细详解
Top命令经常用来监控Linux的系统状况,比如cpu、内存的使用。退出top界面命令:q查看多核CPU命令mpstat -P ALL 和 sar -P ALL说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txt本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。top进入视图top视图 01【top视图 01】是刚进入top的基本视图,我们来结合这个视图讲...原创 2021-06-07 10:50:12 · 1253 阅读 · 0 评论 -
Linux:“sed”
命令格式sed的命令格式:sed [options] 'command' file(s);sed的脚本格式:sed [options] -f scriptfile file(s);选项 -e :直接在命令行模式上进行sed动作编辑,此为默认选项; -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作; -i :直接修改文件内容; -n :只打印模式匹配的行; -r :支持扩展表达式; -h或--help:显示帮助;原创 2021-06-06 15:37:59 · 157 阅读 · 0 评论 -
Linux sed 命令
Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。语法sed [-hnV][-e<script>][-f<script文件>][文本文件]参数说明:-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。 -f<script文件>或--fil原创 2021-06-06 15:32:16 · 160 阅读 · 0 评论 -
Linux grep 命令
Linux grep 命令用于查找文件里符合条件的字符串。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为-,则 grep 指令会从标准输入设备读取数据。语法grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e...原创 2021-06-06 15:29:15 · 130 阅读 · 0 评论 -
利用shell脚本添加环境变量
在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory但是如果把export那句话单独在命令行运行...原创 2019-11-15 09:06:18 · 3138 阅读 · 0 评论 -
Alpine缺少字体的问题
我现在的这家公司基本都在用现代化的开发工具,所有程序写完都在docker环境下运行,我们公司dalao钦定的底包就是alpine。后续的问题都是Alpine没有自带默认字体造成的。如果你想快速知道怎么解决请直接看最后。问题我遇到的问题是这样的:java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(F...原创 2019-11-13 16:10:50 · 3979 阅读 · 0 评论 -
linux 上面安装git源码包
linux 上面有自带的一些工具去安装应用如yum,rpm等等。但是常见的还是下载tar包然后部署编译等。常见的tar包有:源码包 后缀: tar.gz ,tar.gz2(解压之后,要配置,编译,安装三步走,才可使用) 二进制包 后缀: tar.xz (解压完就有可执行文件,可直接使用)git 源码包 安装去git官网下载后缀tar.gz的tar包wget https://mir...原创 2019-11-13 16:06:56 · 1216 阅读 · 0 评论 -
Linux离线安装gcc
linux 离线安装gcc4.8.5 (简单易懂,已成功安装)联网的情况下直接使用命令yum -y install gcc 安装。不能联网就需要离线安装了。步骤如下:1. 获取离线安装包:可以使用我已经下载好的包,链接:https://pan.baidu.com/s/1J-wVsAoTmfn_iiOnYSrmZA 密码:beeempfr-3.1.1-4.el7...原创 2019-11-13 16:02:14 · 752 阅读 · 0 评论 -
Ubuntu 下如何查看已安装的软件
1.查看安装的所有软件dpkg -l例如:dpkg -l | grep ftp2.查看软件安装的路径dpkg -L | grep ftp也可以用 whereis ftp3.查看软件版本aptitudeshow例如:aptitudeshow ftp...原创 2019-11-07 18:04:01 · 523 阅读 · 0 评论 -
linux多线程结束时,回收子进程问题
当已经有SIGCHLD信号时,我们调用waitpid是可以立即返回的。所以经常在SIGCHLD处理程序中调用waitpid函数,这样就可以期望他总能立即返回,但是如果在执行SIGCHLD处理程序期间又有子进程终止,因为unix不对信号排队,如果多于一个子进程终止,则会导致信号丢失,在这种情况下,如果只调用一次waitpid就会导致僵死进程的产生,可以采取while(waitpid(-1,0,WNO原创 2016-12-26 20:25:06 · 952 阅读 · 0 评论 -
linux将参数传递到信号处理函数
普通的信号处理函数,在注册时一般为:singal(信号,信号处理函数),此种都不能把需要的参数传递到处理函数里面。如果想将参数也传递到信号处理函数里面,需要用到sigaction结构体。注册函数为sigaction函数。 发送信号并传递信息用sigqueue函数。#include #include #include void new_op(int,siginfo_原创 2016-12-26 20:21:21 · 7720 阅读 · 0 评论 -
linux文件锁
文件锁借助 fcntl函数来实现锁机制。操作文件的进程没有获得锁时,可以打开,但无法执行read、write操作。fcntl函数: 获取、设置文件访问控制属性。int fcntl(int fd, int cmd, ... /* arg */ );参2:F_SETLK (struct flock *) 设置文件锁(trylock)F_SETLKW (struct floc原创 2016-12-25 12:30:13 · 581 阅读 · 0 评论 -
linux进程互斥锁
进程间同步互斥量mutex进程间也可以使用互斥锁,来达到同步的目的。但应在pthread_mutex_init初始化之前,修改其属性为进程间共享。mutex的属性修改函数主要有以下几个。主要应用函数:pthread_mutexattr_t mattr 类型: 用于定义mutex锁的【属性】pthread_mutexattr_init函数: 初始化一个mutex属性对象int原创 2016-12-25 12:27:30 · 3085 阅读 · 1 评论 -
linux信号量
信号量进化版的互斥锁(1 --> N)由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。这样虽然达到了多线程操作共享数据时保证数据正确性的目的,却无形中导致线程的并发性下降。线程从并行执行,变成了串行执行。与直接使用单进程无异。信号量,是相对折中的一种处理方式,既能保证同步,数据不混乱,又能提高线程并发。原创 2016-12-25 12:23:21 · 1045 阅读 · 0 评论 -
linux条件变量
条件变量:条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。主要应用函数:pthread_cond_init函数pthread_cond_destroy函数pthread_cond_wait函数pthread_cond_timedwait函数pthread_cond_signal函数pthread_cond_broadca原创 2016-12-25 12:20:35 · 566 阅读 · 0 评论 -
linux读写锁
读写锁与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享。读写锁状态:一把读写锁具备三种状态:1. 读模式下加锁状态 (读锁)2. 写模式下加锁状态 (写锁)3. 不加锁状态读写锁特性: 1. 读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。2. 读写锁是“读模式加锁”时, 如果线程以读模式对其加锁会成功;如果线程以写模式加原创 2016-12-25 12:15:04 · 799 阅读 · 0 评论 -
linux互斥锁
互斥量mutex Linux中提供一把互斥锁mutex(也称之为互斥量)。每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。资源还是共享的,线程间也还是竞争的, 但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了。 但,应注意:同一时刻,只能有一个线程持有该锁。当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁原创 2016-12-25 12:12:55 · 872 阅读 · 0 评论 -
linux线程属性
线程属性本节作为指引性介绍,linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。typedef struct{int etachstate; //线程的分离状态int s原创 2016-12-25 10:28:16 · 487 阅读 · 0 评论 -
gdb调试跟踪多进程
gdb调试使用gdb调试的时候,gdb只能跟踪一个进程。可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或者是跟踪子进程。默认跟踪父进程。set follow-fork-mode child 命令设置gdb在fork之后跟踪子进程。set follow-fork-mode parent 设置跟踪父进程。注意,一定要在fork函数调用之前设置才有效。原创 2016-12-23 16:29:34 · 764 阅读 · 0 评论 -
孤儿进程和僵尸进程的概念
孤儿进程孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。 【orphan.c】#include #include #include int main(void){ pid_t pid; pid = fork(); if (pid == 0) { while原创 2016-12-23 16:40:04 · 444 阅读 · 0 评论 -
Linux的wait函数
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除掉这个进程。我们知道一个进程的退出状态可以在Shell中用特殊变量$?查看,因为Shell是它的父进程,当它终止时Shell调用wa原创 2016-12-23 16:50:08 · 3401 阅读 · 0 评论 -
linux的waitpid函数
waitpid函数作用同wait,但可指定pid进程清理,可以不阻塞。 pid_t waitpid(pid_t pid, int *status, in options);成功:返回清理掉的子进程ID;失败:-1(无子进程)特殊参数和返回情况:参数pid: > 0 回收指定ID的子进程-1 回收任意子进程(相当于wait)0 回收和当前调用waitpid一原创 2016-12-23 16:53:54 · 1559 阅读 · 0 评论 -
linux管道pipe详解
管道管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1. 其本质是一个伪文件(实为内核缓冲区)2. 由两个文件描述符引用,一个表示读端,一个表示写端。3. 规定数据从管道的写端流入管道,从读端流出。管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。管道的局限性原创 2016-12-23 17:16:36 · 93414 阅读 · 11 评论 -
linux共享存储映射mmap
共享存储映射文件进程间通信使用文件也可以完成IPC,理论依据是,fork后,父子进程共享文件描述符。也就共享打开的文件。 练习:编程测试,父子进程共享打开的文件。借助文件进行进程间通信。 【fork_shared_fd.c】/* *父子进程共享打开的文件描述符------使用文件完成进程间通信. */#include #include #include #i原创 2016-12-23 17:59:24 · 2504 阅读 · 0 评论 -
linux信号集操作函数
信号集操作函数内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。信号集设定sigset_t set; // typedef unsigned long sigset_t;int sigemptyset(sigset_t *set); 将某个信号集清0 成功:0;失原创 2016-12-24 10:14:26 · 935 阅读 · 0 评论 -
linux的信号捕捉函数详解
信号捕捉signal函数注册一个信号捕捉函数:typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);该函数由ANSI定义,由于历史原因在不同版本的Unix和不同版本的Linux中可能有不同的行为。因此应该尽量避免使用它,取而代之使用sigaction函数。原创 2016-12-24 10:37:54 · 5648 阅读 · 1 评论 -
linux的SIGCHLD信号
SIGCHLD信号SIGCHLD的产生条件子进程终止时子进程接收到SIGSTOP信号停止时子进程处在停止态,接受到SIGCONT后唤醒时借助SIGCHLD信号回收子进程#include #include #include #include #include #include #include void sys_err(char *str){ per原创 2016-12-24 11:26:32 · 10878 阅读 · 1 评论 -
linux进程组操作函数
进程组操作函数getpgrp函数获取当前进程的进程组IDpid_t getpgrp(void); 总是返回调用者的进程组IDgetpgid函数获取指定进程的进程组IDpid_t getpgid(pid_t pid); 成功:0;失败:-1,设置errno如果pid = 0,那么该函数作用和getpgrp一样。练习:查看进程对应的进程组ID 【getpgid.c】原创 2016-12-24 15:33:17 · 786 阅读 · 0 评论 -
linux会话
会话创建会话创建一个会话需要注意以下6点注意事项:1. 调用进程不能是进程组组长,该进程变成新会话首进程(session header)2. 该进程成为一个新进程组的组长进程。3. 需有root权限(ubuntu不需要)4. 新会话丢弃原有的控制终端,该会话没有控制终端5. 该调用进程是组长进程,则出错返回6. 建立新会话时,先调用fork, 父进程终止,子进程调用原创 2016-12-24 15:35:20 · 2842 阅读 · 2 评论 -
linux守护进程
守护进程Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。 创建守护进程,最关键的一步是调用se原创 2016-12-24 15:38:13 · 385 阅读 · 0 评论 -
linux线程控制原语1
pthread_self函数获取线程ID。其作用对应进程中 getpid() 函数。pthread_t pthread_self(void); 返回值:成功:0; 失败:无!线程ID:pthread_t类型,本质:在Linux下为无符号整数(%lu),其他系统中可能是结构体实现线程ID是进程内部,识别标志。(两个进程间,线程ID允许相同)注意:不应使用全局变量 pthread_原创 2016-12-25 10:21:08 · 559 阅读 · 0 评论 -
linux线程控制原语2
pthread_exit函数将单个线程退出void pthread_exit(void *retval); 参数:retval表示线程退出状态,通常传NULL思考:使用exit将指定线程退出,可以吗? 【pthrd_exit.c】#include #include #include #include void *tfn(void *arg){ int i; i =原创 2016-12-25 10:26:09 · 391 阅读 · 0 评论 -
Linux进程共享
进程共享父子进程之间在fork后。有哪些相同,那些相异之处呢?刚fork之后:父子相同处: 全局变量、.data、.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式...父子不同处: 1.进程ID 2.fork返回值 3.父进程ID 4.进程运行时间 5.闹钟(定时器) 6.未决信号集似乎,子进程复制了父进程0-3G用户原创 2016-12-23 16:27:11 · 618 阅读 · 0 评论