linuxtpid命令的简单介绍

linux获取进程id和进程名称

linux获取进程id和进程名称作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率,使用方法等信息。才能针对主要应用做出更好的改进。

专注于为中小企业提供网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业灯塔免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

那么就需要记录调用者的进程id或者进程名称,并且保存下来。保存的动作可以采用共享内存,也可以采用文件,这个在下篇博文描述,本文描述如何获取进程id和进程名称。范例:#include

stdio.h#include

unistd.h#define

CFGMNG_TASK_NAME_LEN

256int

main(){

int

ret;

char

ac_tmp[CFGMNG_TASK_NAME_LEN];

ret

=

cfgmng_get_taskname(ac_tmp,

CFGMNG_TASK_NAME_LEN);

if

(0

!=

ret)

{

printf(Call

cfgmng_get_taskname

fail./n);

return

-1;

}

printf(The

running

task

name

is

%s./n,

ac_tmp);

return

0;}int

cfgmng_get_taskname(char

*ac,

int

len){

int

count

=

0;

int

nIndex

=

0;

char

chPath[CFGMNG_TASK_NAME_LEN]

=

{0};

char

cParam[100]

=

{0};

char

*cTem

=

chPath;

int

tmp_len;

pid_t

pId

=

getpid();

sprintf(cParam,/proc/%d/exe,pId);/*

printf(cParam

=

%s./n,

cParam);*/

count

=

readlink(cParam,

chPath,

CFGMNG_TASK_NAME_LEN);/*

printf(count

=

%d./n,

count);*/

if

(count

||

count

=

CFGMNG_TASK_NAME_LEN)

{

printf(Current

System

Not

Surport

Proc./n);

return

-1;

}

else

{

nIndex

=

count

-

1;

for(

;

nIndex

=

0;

nIndex--)

{

if(

chPath[nIndex]

==

'/'

)//筛选出进程名

{

nIndex++;

cTem

+=

nIndex;

break;

}

}

}

tmp_len

=

strlen(cTem);

if

(0

==

tmp_len)

{

printf(Get

task

fail./n);

return

-1;

}

if

(len

=

tmp_len

+1)

{

printf(len(%d)

is

less

than

taskname(%s)'s

len./n,

len,

cTem);

return

-1;

}

strcpy(ac,

cTem);

return

0;}从上面的实验范例可以看出,主要使用的函数是getpid获取本进程的id,再到/proc/pid/exe

中去找到对应的进程名称。在/proc目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。

华为路由器命令中TPID是什么意思

华为路由器基本配置命令:

en 进入特权模式

conf 进入全局配置模式

in s0 进入 serial 0 端口配置

ip add xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx 添加ip 地址和掩码,电信分配

enca hdlc/ppp 捆绑链路协议 hdlc 或者 ppp

ip unn e0

exit 回到全局配置模式

in e0 进入以太接口配置

ip add xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx 添加ip 地址和掩码,电信分配

exit 回到全局配置模式

ip route 0.0.0.0 0.0.0.0 s 0 添加路由表

ena password 口令

write

exit

以上根据中国电信 ddn 专线多数情况应用

普通用户模式

enable 转入特权用户模式

exit 退出配置

help 系统帮助简述

language 语言模式切换

ping 检查网络主机连接及主机是否可达

show 显示系统运行信息

telnet 远程登录功能

tracert 跟踪到目的地经过了哪些路由器

特权用户模式

#?

clear 清除各项统计信息

clock 管理系统时钟

configure 进入全局配置模式

debug 开启调试开关

disable 返回普通用户模式

download 下载新版本软件和配置文件

erase 擦除FLASH中的配置

exec-timeout 打开EXEC超时退出开关

exit 退出配置

first-config 设置或清除初次配置标志

help 系统帮助简述

language 语言模式切换

monitor 打开用户屏幕调试信息输出开关

no 关闭调试开关

ping 检查网络主机连接及主机是否可达

reboot 路由器重启

setup 配置路由器参数

show 显示系统运行信息

telnet 远程登录功能

tracert 跟踪到目的地经过了哪些路由器

unmonitor 关闭用户屏幕调试信息输出开关

write 将当前配置参数保存至FLASH MEM中

全局配置模式

aaa-enable 使能配置AAA(认证,授权和计费)

access-list 配置标准访问表

arp 设置静态ARP人口

chat-script 生成一个用在modem上的执行脚本

custom-list 创建定制队列列表

dialer-list 创建dialer-list

dram-wait 设置DRAM等待状态

enable 修改ENABLE口令

exit 退出全局配置模式

firewall 配置防火墙状态

flow-interval 设置流量控制时间间隔

frame-relay 帧中继全局配置命令集

ftp-server FTP 服务器

help 系统帮助命令简述

host 添加主机名称和其IP地址

hostname 修改主机名

ifquelen 更改接口队列长度

interface 选择配置接口

ip 全局IP配置命令子集

ipx 全局IPX配置命令子集

loghost 设置日志主机IP地址

logic-channel 配置逻辑通道

login 启动EXEC登录验证

modem-timeout 设置 modem 超时时间

multilink 配置multilink 用户使用的接口

multilink-user 配置multilink 用户使用的接口

natserver 设置FTP,TELNET,WWW服务的IP地址

no 关闭某些参数开关

priority-list 创建优先级队列列表

router 启动路由处理

settr 设置时间范围

snmp-server 修改SNMP参数

tcp 配置全局TCP参数

timerange 启动或关闭时间区域

user 为PPP验证向系统中加入用户

vpdn 设置VPDN

vpdn-group 设置VPDN组

x25 X.25协议分组层

路由器以太网口配置命令

2.1.1 description

设置以太网口描述。

description ethernet-description

no description

如何使用gdb调试多进程

在大多数系统,gdb对使用fork创建的进程没有进行特别的支持。当父进程使用fork创建子进程,gdb仍然只会调试父进程,而子进程没有得到控制和调试。这个时候,如果你在子进程执行到的代码中设置了断点,那么当子进程执行到这个断点的时候,会产生一个SIGTRAP的信号,如果没有对此信号进行捕捉处理,就会按默认的处理方式处理——终止进程。

当然,你可以使用时间延迟的方法,在子进程fork出来之后,使用Sleep函数等待一段时间再运行,在这段时间中你使用ps找到该进程,然后使用Attach方法把该进程附加到gdb中,从而达到可以调试子进程的目的。

在一部分系统中(我使用的是基于2.6内核的CentOS,支持follow-fork和detach-on-fork模式),比如HP-UX11.x之后的版本,Linux2.5.60之后的版本,可以使用以下的方法来达到方便的进行多进程调试功能。

默认情况下,父进程fork一个子进程,gdb只会继续调试父进程而不会管子进程的运行。

如果你想跟踪子进程进行调试,可以使用set follow-fork-mode mode来设置fork跟随模式。

set follow-fork-mode 所带的mode参数可以是以下的一种:

parent

gdb只跟踪父进程,不跟踪子进程,这是默认的模式。

child

gdb在子进程产生以后只跟踪子进程,放弃对父进程的跟踪。

进入gdb以后,我们可以使用show follow-fork-mode来查看目前的跟踪模式。

可以看到目前使用的模式是parent。

然而,有的时候,我们想同时调试父进程和子进程,以上的方法就不能满足了。Linux提供了set detach-on-fork mode命令来供我们使用。其使用的mode可以是以下的一种:

on

只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。

off

父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定)

另一个进程会被设置为暂停状态。

同样,show detach-on-fork显示了目前是的detach-on-fork模式,如上图。

以上是调试fork产生子进程的情况,但是如果子进程使用exec系统函数而装载了新程序执行呢?——我们使用set follow-exec-mode mode提供的模式来跟踪这个exec装载的程序。mode可以是以下的一种:

new 当发生exec的时候,如果这个选项是new,则新建一个inferior给执行起来的子进程,而父进程的inferior仍然保留,当前保留的inferior的程序状态是没有执行。

same 当发生exec的时候,如果这个选项是same(默认值),因为父进程已经退出,所以自动在执行exec的inferior上控制子进程。

我们可以使用apue里面第8章的例子代码来做测试:

#include "apue.h"

intglob = 6;/* external variable in initialized data */

charbuf[] = "a write to stdout\n";

int

main(void)

{

intvar;/* automatic variable on the stack */

pid_tpid;

var = 88;

if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)

err_sys("write error");

printf("before fork\n");/* we don't flush stdout */

if ((pid = fork()) 0) {

err_sys("fork error");

} else if (pid == 0) {/* child */

glob++;/* modify variables */

var++;

} else {

sleep(2);/* parent */

}

printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);

exit(0);

}


本文标题:linuxtpid命令的简单介绍
新闻来源:http://csdahua.cn/article/dodopej.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流