pid

linux 内核与用户空间通信之netlink使用方法

﹥>﹥吖頭↗ 提交于 2020-02-22 18:37:06
摘自 https://www.cnblogs.com/x_wukong/p/5920437.html 转自:http://blog.csdn.net/haomcu/article/details/7371835 Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成 内核空间 与 用户空间 通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。 本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。

关于php的array_diff和array_diff_assoc的使用总结

…衆ロ難τιáo~ 提交于 2020-02-22 05:32:02
a rray_diff() 对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的 值 。 对应的键名保留。 注意 是值。和键名无关。相当于把所有值拿出来 去和其他数组比。 第一个参数为要对比的数组。 但该函数只能对多维数组的第一维进行差值比较。而且这种对比时只对键值的对比,与键名无关(只会找两个(或两个以上)数组中键值有区别的值)。 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的 例子:array_diff可以找出俩数组的差值c_pid: 但是,如果array的任一键值和更改的值有重叠,则array_diff无法测出此更改值,如下: 正常情况下array1中和array2中的比较中,更新的元素有c_pid和c_order,但结果只得到c_order的差值,为什么呢? 个人理解:array_diff()将array1的值和array2的值做对比,而不考虑键名,所以array1的c_pid的值在array2的c_level中找到,故忽略c_pid的差值。 array_diff_assoc()与array_diff()用法一样,不同的是,它的比较是带上键名的,也就是说它找到的就是几个数组中键名相同键值不同的项,也就是说,上面array_diff的第二种情况它是可以找出c_pid和c

Linux Hook 笔记

匆匆过客 提交于 2020-02-18 18:10:18
相信很多人对"Hook"都不会陌生,其中文翻译为"钩子".在编程中, 钩子表示一个可以允许编程者插入自定义程序的地方,通常是打包好的程序中提供的接口. 比如,我们想要提供一段代码来分析程序中某段逻辑路径被执行的频率,或者想要在其中 插入更多功能时就会用到钩子. 钩子都是以固定的目的提供给用户的,并且一般都有文档说明. 通过Hook,我们可以暂停系统调用,或者通过改变系统调用的参数来改变正常的输出结果, 甚至可以中止一个当前运行中的进程并且将控制权转移到自己手上. 基本概念 操作系统通过一系列称为系统调用的方法来提供各种服务.他们提供了标准的API来访问下面的 硬件设备和底层服务,比如文件系统. 以32位系统为例,当进程运行系统调用前,会先把系统调用号放到寄存器 %eax 中,并且将该系统调用的参数依次放入寄存器 %ebx, %ecx, %edx 以及 %esi 和 %edi 中. 以write系统调用为例: write(2, "Hello", 5); 在32位系统中会转换成: movl $1, %eax movl $2, %ebx movl $hello,%ecx movl $5, %edx int $0x80 其中 1 为write的系统调用号, 所有的系统调用号码定义在 unistd.h 文件中. $hello表示字符串 "Hello"的地址;

php递归函数--遍历

倖福魔咒の 提交于 2020-02-17 23:31:16
多应用在 栏目多级、无限极调用 数据库数据如: id catname pid 1 关于我们 0 2 新闻 0 3 公司新闻 2 4 行业动态 2 select读出数据后整理函数 $cate function digui($cate,$pid=0){   foreach($cate as $v){     if($v['pid']==$pid){       $v['child'] = digui($cate,$v['id']);       $arr[] = $v;     }   } return $arr; } 相当于不断在循环整个$cate数组。。 遍历html代码 1 <foreach name="cate" item='app'> 2 <div class="app"> 3 <p> 4 <strong>{$app.catname}</strong> 8 </p> 9 <foreach name="app.child" item='action'> 10 <dl> 11 <dt> 12 <strong>{$action.catnaem}</strong> 16 </dt>24         </dl> 25           </foreach> 26         </div> 27       </foreach> 来源: https://www.cnblogs

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、jinfo、jconsole使用详解

安稳与你 提交于 2020-02-16 10:52:34
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。 A、 jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息。语法格式如下: 1 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: 1 2 3 4 -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l

PHP多进程初步

不羁岁月 提交于 2020-02-15 10:35:21
一、前言 我们都知道PHP是单线程执行,处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时。不能应用在Web服务器环境。 /** 检测是否CLI模式,确保这个函数只能运行在SHELL中 */ if (substr(php_sapi_name(), 0, 3) !== 'cli') {   die("cli mode only"); } 日常任务中,有时需要通过php脚本执行一些日志分析,队列处理等任务,当数据量比较大时,可以使用多进程来处理。 PHP的多线程也曾被人提及,但进程内多线程资源共享和分配的问题难以解决。PHP也有多线程想关的扩展 pthreads ,但据说不太稳定,且要求环境为线程安全,所用不多。 要实现PHP的多进程,需要安装 pcntl 和 posix 扩展。 二、创建子进程 使用 pcntl_fork() 函数可以在当前位置产生分支。fork 是创建了一个子进程,父进程和子进程都从 fork 的位置开始向下继续执行,不同的是父进程执行过程中,得到的 fork 返回值为子进程号,而子进程得到的是0,执行失败则返回-1。 因为系统初始init进程的pid为1,后来的所有进程pid都会大于该进程,所以可以通过 pcntl_fork()

PID模块(含常用改进算法和例程)--C源码

為{幸葍}努か 提交于 2020-02-15 10:11:44
大家经常会用到PID算法,虽然算法简单,但实际应用中往往要考虑很多细节,而且往往普通的PID算法不能很好的应对大家的需求,为了能在打代码的时候节省点时间,这里作者提供一个自己写好的PID模块,可以让各位在工程中应用。 下载地址: 百度云:链接:https://pan.baidu.com/s/1PI6EuMif5Y_67c4VWE1x7A 提取码:yhmi Github:连接:https://github.com/diceTZ/pid.git PID模块除了普通PID还加入了常用的几个改进PID算法: 1、积分分离PID 2、抗积分饱和PID 3、变速积分PID – 由于需求不一样,这个需要用户自行修改 4、不完全微分PID 5、微分先行PID 注:该PID模块为位置型PID 以下为.h代码和例程代码 pid.h(由于篇幅过长pid.c在上述下载地址中存放) //@作者 :tou_zi //@编写时间 :2019年4月6日 //@修改时间 :2019年4月6日 //@文件名 :pid.h //@描述 :pid模块库,可实现pid的计算 # ifndef _PID_H # define _PID_H # ifndef u8 # define u8 unsigned char # endif # define INTEGRAL_NORMAL 0 //普通积分 # define

php开启子进程处理

浪尽此生 提交于 2020-02-14 16:17:07
$pageNum = ceil($totalNum/$pageSize); for($page=1;$page<=$pageNum;$page++){ $this->o_pcntl->tps_pcntl_wait('$this->o_cron->doNewMemberSharPage(\''.$page.'\',\''.$pageSize.'\');');//用子进程处理每一页 } <?php class o_pcntl extends CI_Model { function __construct() { parent::__construct(); } public function tps_pcntl_wait($childProcessCode){ $pid = pcntl_fork(); if($pid>0){ pcntl_wait($status); @$this->db->reconnect(); }elseif($pid==0){ eval($childProcessCode); exit; }else{ die('Cannot fork.'); } } } 来源: https://www.cnblogs.com/php-linux/p/6623479.html

Linux入门-第七周

我们两清 提交于 2020-02-14 08:59:10
1、编写脚本实现传入进程PID,查看对应进程/proc下CPU、内存指标。 1 #!/bin/bash 2 read -p "Input PID Value: " pid    #读取PID进程号 3 pid_exist=`ps aux|awk '{print $2}'|grep -w $pid`      #定义一个字符串,通过grep命令,显示当前查找所有用户所有程序并打印出来 4 if [ ! $pid_exist ];then    #如果pid不存在,然后 5 echo "$pid is not exist!!"              #输出pid is not exist!! 6 else                                #否则 7 echo "Memory Usage :"                 #输出内存使用情况 8 cat /proc/$pid/status | grep ^Vm         #通过grep命令进行精确查找用cat命令查看到/proc下pid进程物理内存使用状态 9 echo "Cpu Usage : "            #输出CPU使用情况 10 echo " PID LWP CPU% :"          #输出PID LWP CPU%情况 11 ps -eLo pid,lwp,pcpu

Linux fork()

青春壹個敷衍的年華 提交于 2020-02-13 01:47:47
函数介绍 pid_t fork(void) 复制当前进程,返回值类型为pit_t(相当于int类型)表示进行的pid,在父进程中返回值为子进程的pid 其大于0,在子进程中,其返回值为0,若返回值小于0 表示创建子进程失败。 分析:创建子进程相当于复制了父进程的pcb,pcb在计算机中类似于链表一样串接在一起,所以父进程中返回的pid指向子进程,而子进程返回的pid为0,类似于指向NULL。 创建失败的原因: 当前进程数达到上限 系统内存不足 注意:子进程虽然有和父进程一样的pcb,但是每个进程的pid都是不一样的,子进程的pid一般 =父进程的pid +1 ,另外 父子进程代码相同,数据独享 例: 下面两段代码输出结果相同 int main ( ) { int ret = fork ( ) ; //父进程中getpid()为父进程pid ,父进程中ret返回值为子进程pid //子进程中getpid()为子进程pid,子进程中ret返回值为 0 printf ( "hello proc : %d!, ret: %d\n" , getpid ( ) , ret ) ; sleep ( 1 ) ; return 0 ; } int main ( ) { int ret = fork ( ) ; if ( ret < 0 ) { perror ( "fork" ) ; return 1