使用代码验证linux子进程与父进程的关系
/******** basic.c ********/
#include "basic.h"
pid_t Fork(void)
{
pid_t pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork error: %s\n", strerror(errno));
exit(0);
}
return pid;
}
********** basic.h ***********
#ifndef __CSAPP_BASIC_H
#define __CSAPP_BASIC_H
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
/* function definition concerned with basic.c */
pid_t Fork();
#endif
******* fork.c *********
#include "basic.h"
int main()
{
int pid = Fork();
int x = 2;
if (pid == 0) {
printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
sleep(3);
printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
exit(0);
}
printf("parent: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), --x);
}
通过 gcc fork.c basic.c -o fork 编译即可的 fork 程序。 运行 ./fork
可以看出父进程首先退出,退出前child的PPID为12256, 退出后子进程的PPID变为了 1.说明父进程退出后的子进程由 init 超级进程1领养。而该进程是不绝不会退出的。
相关推荐
-
linux下查看swap分区被哪些进程占用实现脚本
相信很多的系统管理员可能都遇见过这样的情况,用登录一台服务器,使用free命令查看内存,却发现swap分区被占用.那么到底是什么进程占用了这部分swap分区呢? 从2.6.16版本的kernel开始,我们可以使用proc文件系统中的smaps来查找这个问题.下边是一个列出所有进程占用swap分区情况的列表.可以通过简单修改就可以用于统计在/proc/$PID/smaps查出.以下是脚本: 复制代码 代码如下: for i in `cd /proc;ls |grep "^[0-9]"|a
-
Linux C 获取进程退出值的实现代码
如以下代码所示: 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <errno.h>int main(int argc, char *argv[]){ pid_t pid; int stat; in
-
linux c 获得当前进程的进程名和执行路径(示例)
复制代码 代码如下: [sam@hzhsan test]$ more test_processname.cpp #include <limits.h>#include <stdio.h>#include <string.h>#include <unistd.h> size_t get_executable_path( char* processdir,char* processname, size_t len){ char* path_end;
-
Linux进程通信(IPC)方式简介
进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间.共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程).资源共享:多个进程之间共享同样的资源.为了作到这一点,需要内核提供锁和同步机制.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并
-
linux vps服务器进程kswapd0与events/0消耗大量CPU的问题
今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用.盯了有好十几分钟,主要消耗 CPU 的进程有两个,一个是 mysql,另一个是 apache.下面的图可以看到,mysql 占用了很大部分的 CPU 使用.apache 单个进程虽然占得不多,但有不少个 apache 进程同时存在,也消耗了不少 CPU 的使用. 当然,这些不足以让服务器的 CPU 直接跑满挂掉,后来发现了两个大家伙: 当 my
-
linux下监视进程 崩溃挂掉后自动重启的shell脚本
================================================= 本文为khler原作,转载必须确保本文完整并完整保留原作者信息及本文原始链接 Author: HeYuanHui E-mail: khler@163.com QQ: 23381103 MSN: pragmac@hotmail.com ================================================= 如何保证服务一直运行?如何保证即使服务挂掉了也能自动重启?在写服务
-
linux获取进程执行时间方法示例
1.前言 测试一个程序的执行时间,时间包括用户CPU时间.系统CPU时间.时钟时间.之前获取之前时间都是在程序的main函数用time函数实现,这个只能粗略的计算程序的执行时间,不能准确的获取其他时间.在看<APUE>时,书中有关程序时间测试程序,非常正规,提供这三个时间.如是,上网搜了一下,进行总结一下. 2.获取方法 有两种方法可以获取,第一种是用time命令,time 进程.第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构. 查看tim
-
Linux/window下怎样查看某个端口被哪个程序/进程占用
Windows: C:/Users/ewanbao>netstat -aon|findstr "123" TCP 127.0.0.1:55123 0.0.0.0:0 LISTENING 5092 TCP 127.0.0.1:55123 127.0.0.1:55124 ESTABLISHED 5092 TCP 127.0.0.1:55124 127.0.0.1:55123 ESTABLISHED 5092 UDP 0.0.0.0:123 *:* 1416 UDP [::]:123
-
linux系统使用python监控apache服务器进程脚本分享
crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 进程异常退出, 4 秒后重新启动" time.sleep(3) os.system
-
Linux Shell中判断进程是否存在的代码
1 利用pgrep 匹配名字 复制代码 代码如下: if test $( pgrep -f $1 | wc -l ) -eq 0 then echo "进程不存在" else echo "存在进程" fi 以下是补充内容: 当前系统中的进程: apple@ubuntu:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:57 ? 00:00:02 /sbin/init root 2 0 0 13:57
-
浅析linux环境下一个进程最多能有多少个线程
默认情况下: 主线程+辅助线程 +<253个自己的线程<=255 含主线程和一个辅助线程,最多255个,即你自己只能生成253个线程. 据说可以设置线程数目: 据说是可以设置的,但本人还没有验证!不知道可否. 在你的shell中键入limit命令,里面有descriptor的数目,就是你的进程可以创建的最大线程数目.可以通过修改内核文件更改该数目.
-
linux根据pid获取进程名和获取进程pid(c语言获取pid)
Liunx中通过进程名查找进程PID可以通过 pidof [进程名] 来查找.反过来 ,相同通过PID查找进程名则没有相关命令.在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个以进程PID命名的文件夹,其中存放进程运行的N多信息.其中有一个status文件,cat显示该文件, 第一行的Name即为进程名. 打开stardict程序,进程名为stardict: shell中分别根据Pid获取进程名.根据进程名获取Pid 1)查找stard
-
深入理解linux下查看进程内存的使用情况
动态查看一个进程的内存使用 复制代码 代码如下: 1.top命令top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s如果想根据内存使用量进行排序,可以shift + m(Sort by memory usage) 静态查看一个进程的内存使用 复制代码 代码如下: 1.pmap命令pmap pid 2.ps命令ps aux|grep process_name 3.查看/proc/process_id/文件夹下的status文件Name: ph
-
shell监控linux系统进程创建脚本分享
复制代码 代码如下: #!/bin/shwhile truedo ps ax -o command | sort | uniq > 1.txt usleep 100000 ps ax -o command | sort | uniq > 2.txt diff 1.txt 2.txt | grep '^\+[^\+]' | while read a do a=`echo ${a#*+}` if [[ "$a" != "uniq" ]] &&a
-
linux杀进程的多种方法
常规篇: 首先,用ps查看进程,方法如下: 复制代码 代码如下: $ ps -ef $ ps -ef --smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helpersmx 1824 1822 0 11:38 pts/0 00:00:02 bashsmx 1827
-
深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数
=====最大线程数====linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX这个限制可以在 /usr/include/bits/local_lim.h 中查看对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M可以写一段简单的代码验证最多可以创建多少个线程 复制代码
-
Linux BASH多进程并行处理的方法实现
复制代码 代码如下: #!/bin/bash SEND_THREAD_NUM=13 tmp_fifofile="/tmp/$$.fifo" # 脚本运行的当前进程ID号作为文件名 mkfifo "$tmp_fifofile" # 新建一个随机fifo管道文件 exec 6<>"$tmp_fifofile" # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile for ((i=0;i<$SEND_THRE
-
linux 创建守护进程的相关知识
创建子进程,父进程退出 这是编写守护进程的第一步.由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象.之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到了与控制终端的脱离. 在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每当系统发现一个孤儿进程是,就会自动由1号进程(init)收养它,这样,原先的子进程就会变成init进程的子进程. 在子进程中创建新会话 这个步骤是创建守护进程中最重要的一步
随机推荐
- Access使用查询--1.2.用选择查询进行分组数据的计算
- Javascript中arguments和arguments.callee的区别浅析
- 再谈DOS批处理下格式化日期字符串的多种方法(详解)
- iOS Touch ID 身份认证
- iOS10 适配远程推送功能实现代码
- asp.net上传图片并作处理水印与缩略图的实例代码
- ASP.NET中动态控制RDLC报表
- python判断端口是否打开的实现代码
- Shell正则表达式验证IP地址
- Android 密码 显示与隐藏功能实例
- ORACLE 系统函数大全SQLSERVER系统函数的异同
- oracle 声明游标(不具备字段)规则应用
- jquery 插件学习(五)
- 类似天猫商品详情随浏览器移动的示例代码
- javascript设计模式之中介者模式Mediator
- 详解微信小程序Page中data数据操作和函数调用
- 解决NDK开发中Eclipse报错Unresolved inclusion jni.h的最终解决方法(已测)
- 解决vue select当前value没有更新到vue对象属性的问题
- 关于AOP在JS中的实现与应用详解
- Vue安装浏览器开发工具的步骤详解