linux之进程操作
文章平均质量分 56
带鱼兄
爱在新空气,快乐每一天
展开
-
一个C程序是如何启动和终止的
概念:1.内核使程序执行的唯一方法是调用了一个exec函数。2.有8种方式使进程终止,其中5种为正常终止,它们是(1)从main返回(2)调用exit(先执行一些清理处理,包括调用执行各终止处理程序,关闭所有的标准I/O流等)(3)调用_exit或_Exit(立即进入内核)(4)最后一个线程从其启动例程返回(5)最后一个线程调用pthread_exit异常终止有3种原创 2016-02-05 15:23:38 · 2069 阅读 · 0 评论 -
fork编程注意事项
概念: 对于unix环境中的高级编程而言,完整地了解unix的进程控制是非常重要的。其中必须熟练掌握的只有几个函数:fork、exec族、_exit、wait和waitpid。总结一下fork编程需要注意的细节:1.每个进程都有一个非负整形表示唯一进程ID,进程ID可以重用,其中涉及延迟重用算法。2.fork函数被调用一次,会返回两次,子进程返回值是0,父进程返回原创 2016-02-14 14:02:40 · 1244 阅读 · 0 评论 -
linux下创建临时文件
前述:linux下删除一个文件需要满足两个条件:1.文件的链接计数为02.没有进程打开该文件我们即使使用rm命令删除了文件,实际上如果有进程打开了该文件,该文件的内容实际上没有被删除,进程仍然可通过fd操控这个文件。删除一个文件时,内核首先检查打开该文件的进程个数;如果这个技术达到0,内核再去检查其链接计数;如果计数也是0.那么就删除该文件的内容。系原创 2016-08-02 15:58:58 · 5167 阅读 · 1 评论 -
linux线程同步和进程同步的区别
基本概念:大部分同学都知道线程同步和进程同步的概念,线程同步:多线程编程中,解决共享资源冲突的问题进程同步:多进程编程中,解决共享资源冲突的问题但是部分同学对线程同步和进程同步研究得不够深入,比如互斥锁和条件变量能不能同时用于线程同步和进程同步,本质上有什么区别。首先我们知道,linux下每个进程都有自己的独立进程空间,假设A进程和B进程各有一个互斥锁,这个锁放原创 2016-06-18 23:34:45 · 7678 阅读 · 1 评论 -
IPC之记录锁详解
基本概念:当两个人同时编辑一个文件时,其后果将如何?在大多数unix系统中,该文件的最后状态取决于写该文件的最后一个进程,记录锁(record locking)的功能是:当一个进程正在读或者修改文件的某个部分时,使用记录锁可以阻止其他进程修改同一区域。POSIX.1标准是使用fcntl方法控制记录锁,函数原型如下FCNTL(2) Linu原创 2016-08-17 01:10:22 · 1706 阅读 · 0 评论 -
防止僵尸进程的fork编程
直接上代码:----- gcc fork_test.c ----- #include #include #include #include #include #include void sig_chld(int signo){ pid_t pid; int stat; while ( (pid = waitpid(-1, &stat, WNO原创 2016-07-10 01:29:36 · 1161 阅读 · 0 评论 -
孤儿进程与僵尸进程
使用第三方软件时,发现系统进程数异常,通过命令 ps - ef | grep defunct 发现很多僵尸进程,最后通过kill掉父进程,并修复了该BUG。网上相关的资料很多很多,下面对孤儿进程和僵尸进程(僵死进程)再做些总结概念孤儿进程:fork编程时,对于父进程已经终止的所有进程,它们的父进程都改变为init进程,其操作过程大概如下,内原创 2015-12-12 00:09:46 · 1591 阅读 · 0 评论 -
进程调度(进程优先级和nice值)
进程优先级是一个数值,它通过动态的优先级和静态的优先级来决定进程被CPU处理的顺序。一个拥有更高进程优先级的进程拥有更大的机率得到处理器的处理。原创 2016-08-05 23:22:57 · 7180 阅读 · 4 评论 -
linux如何查看进程OOM killer
基本概念:Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。如何查看:grep "Out of memory" /var/log/messages结果如图:End;原创 2016-05-31 10:29:10 · 13403 阅读 · 0 评论 -
linux进程资源限制
概念:1.进程的资源限制通常是在系统初始化时有0进程建立,然后由每个后续进程继承,其中一些资源可以用getrlimit和setrlimt函数查询和更改2.在更改资源限制时,须遵守下列三条规则(1)任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。(2)任何一个进程都可减低其硬限制值,但它必须大于或等于其软限制值,这种减低对普通用户而言是不可逆的。(3)只有超级用户才可以原创 2016-02-05 17:23:05 · 2803 阅读 · 0 评论 -
system函数详解
基本概念:system函数在其实现中调用了fork、exec和waitpid,使用system函数而不是直接使用fork和exec的优点是:system进行了所需的各种出错处理以及信号处理。注:对fork和exec不熟悉的先参考文章:fork编程之exec函数详解SYSTEM(3) Linux Programmer's Manual原创 2016-08-04 23:36:32 · 2291 阅读 · 0 评论 -
fork编程之exec函数详解
基本概念:用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段。系统调用:EXECVE(2)原创 2016-08-04 01:00:48 · 2081 阅读 · 0 评论 -
解析器文件
基本概念:解释器是文本文件,其起始行的形式是:#! pathname [optional-argument]在惊叹号和pathname之间的空格是可任选的。最常见的是以下列行开始:#! /bin/shpathname通常是个绝对路径名,对它不进行什么特殊的处理,对这种文件的识别是由内核作为exec系统调用处理的一部分来完成的。内核使调用exec函数的进程实际执行原创 2016-08-04 22:57:42 · 965 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之前两个进程用转载 2016-05-28 23:03:08 · 872 阅读 · 0 评论 -
守护进程与用&结尾的后台运行程序有什么区别
最大的区别有几点:(a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端,在终端未关闭前还是会往终端输出结果(b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响(c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。原创 2016-03-05 20:41:29 · 5917 阅读 · 0 评论 -
linux查看进程的运行路径
方案一:lsof -p $pid | grep cwd方案二:ls -l /proc/$pid/cwd原创 2016-01-20 22:54:46 · 4227 阅读 · 0 评论 -
linux查看进程的启动时间
关键点:使用ps命令ps -eo pid,lstart | grep $pid原创 2016-01-20 22:42:10 · 1127 阅读 · 0 评论 -
linux根据端口号找出进程名
1.使用lsof找出pidlsof -i:222.使用netstat找出pid#找出非监听端口netstat -ntp | grep ":22"#找出监听端口netstat -ntpl | grep ":22"3.使用ps找出进程名ps -ef|grep $pid原创 2016-01-20 22:37:09 · 16357 阅读 · 0 评论 -
linux监控进程物理内存
方法比较多,提供一种最简单的:#!/bin/bashPROCESS="./a.out" #进程名MAXMEM=1048576 #最大物理内存阀值,单位KBID=`ps -ef | grep "${PROCESS}" | grep -v "grep" | awk '{print $2}'`if [ ! -n "$ID" ]; then echo "$PROCES原创 2016-01-21 00:20:36 · 1613 阅读 · 0 评论 -
多线程和fork
先抛出问题:如果父进程是多线程进程,那么进行父进程进行fork后,会发生什么?子进程是否也变成多线程进程?真相是:在子进程内部只存在一个线程,它是由父进程中调用fork的线程的副本构成的。回顾fork编程,子进程会继承整个地址空间的副本,也从父进程那里继承了所有的互斥量、读写锁和条件变量的状态。那么问题来了!如果父进程包含多个线程,子进程在fork返回后,如果紧接着原创 2016-02-23 00:08:04 · 996 阅读 · 0 评论 -
进程栈与线程栈
什么是虚拟内存?什么是进程栈?什么是线程栈?这几个知识点是有关联的。原创 2015-12-17 00:07:56 · 2420 阅读 · 0 评论 -
linux下多进程/多线程文件操作详解
一、基本概念内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响1.每个进程在进程表都有一个记录项,记录项中包含有一张打开文件描述符表,与文件描述符相关联的是:a)文件描述符标志b)指向一个文件表项的指针,父子进程共享一个文件表项2.内核为所有打开文件维持一张文件表,每个文件表项包括a)文件状态标志(读、写、同步、非阻原创 2016-07-24 20:18:37 · 17899 阅读 · 7 评论 -
linux设置最大打开文件数
先来看man的一段解析: /proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be use原创 2017-09-04 00:04:36 · 10969 阅读 · 0 评论