linux进程名字
1. linux获取进程id和进程名称
linux获取进程id和进程名称作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率,使用方法等信息。才能针对主要应用做出更好的改进。
www.dnjsb.com
那么就需要记录调用者的进程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
<
0
||
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目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。
2. 关于linux下的tomcat应用的进程名如何查找
这个不同应用应该是不同的端口吧?
那就用root运行netstat -anp | grep 端口号
找到那个对应的pid。
比如我运行在9292端口上,那就这样:
# netstat -anp | grep 9292
tcp 0 0 :::9292 :::* LISTEN 32630/java
对应tomcat的pid就是32630。
用root运行不是必须的,但如果不用root,那你就必须用运行tomcat的相同用户运行,要不然别的用户没有权限,会获取不到相应的信息。
3. Linux 怎么根据进程号,找对应的进程!
Linux根据进程号查询相应的进程信息,可以使用ps命令的-q参数来进行查询。
有很多用户喜欢用两个屏幕,尤其是程序员、游戏玩家、视频制作者等,可以说双屏显示,游戏工作,两不误。那么电脑设置双屏显示或多屏显示有什么用?怎么设置双屏或多屏显示呢?下面小编简单介绍一下它的作用以及具体的操作方法吧!
双屏显示器有什么好处(电脑)
1、大屏幕拼接
(拼接计算机图形,拼接动态视频)投影墙;公安、军事、铁路、交通、航天、邮电、卫星发射等指挥调度系统;图形图像编辑,三维动画,多媒体设计;工业领域的过程控制;证券交易、期货、银行信息显示;CAD/CAM设计,排版编辑系统,视频图象编辑。
2、文件编辑:
制作企划案文件资料时,同时参考搜寻相关网络资料,不会因为切换视窗而造成资料混乱。
3、绘图编辑:
使用绘图软件设计案件时,同时开启参考文案窗口,也可以延伸桌面,方便处理大型设计稿制作,与校对的窗口完全不重叠。
4、影视娱乐:
(1)收看网络电视,同时浏览其它频道的节目介绍,精彩节目不错过。
(2)玩在线游戏时,可同步对照游戏攻略的密技。
5、 办公室 :
(1)横跨两个以上的屏幕检视大型表格(如EXCEL图表)。
(2)在延伸出的桌面空间上同时开启多个程序,不需频繁地切换使用窗。
(3)读取电子邮件并同时在其它屏幕开启附件档案。
6、程序设计:
撰写复杂的程序时,另外一个窗口同时检视程序执行结果画面,方便进行更新修改。
以上就是双屏电脑的好处了,大家现在对于双屏电脑是不是也有所了解了呢?看到小编为大家列举的都是双屏电脑的好处是不是有些心动呢?下面一起来看看如何设置吧!
一、硬件要求(以Win10系统为案例)
1、电脑主机必须具备VGA/DVI/HDMI任意两路输出的独立显卡接口(一般入门级显卡就支持),如下图所示:
2、准备VGA/DVI/HDMI任意两根线,显示输出接口对应的连接线外观图如下所示:
3、两个显示器,支持VGA/DVI/HDMI任意两种接口(否则需要VGA转换器接头)
二、双屏操作步骤
1、首先把外接显示器与电脑显卡接口通过VGA/DVI/HDMI任意两种线相连接。
2、连接成功后,进入电脑系统桌面,鼠标右击桌面空白处选择【显示设置】
3、如果连接成功就可以看到显示器有2个
4、显示界面找到【多显示器设置】下方选择【扩展这些显示器】,然后两个显示器就可以正常显示了。
5、如果线路检测没问题仍然显示不出来,那么鼠标 右击桌面选择【 NVIDIA 控制面板 】
6、找到【设置多个显示器】,然后勾选我们希望使用的显示器,这样就可以 了。
三、多屏显示方法
硬件要求:
除了支持双屏的硬件条件之外,部分电脑需要进BIOS设置查找相关选项,若无法找到,说明主板不支持,请参考下面操作。
进BIOS操作步骤:
1、开机进入BIOS,找到【Devices】-【Video Setup】选项,敲击Enter回车按键;
2、选择【Select Active Video】选项设置成【IGD】模式,并将【Multi-Monitor Support】选项设置成【Enabled】模式;
3、设置完成后,点击F10键,选择【Yes】进行保存;
4、重启进入操作系统后,在桌面空白处右键,从菜单中找到集成显卡控制台程序,进行多屏显示设置即可。
4. linux查看进程id命令(linux查看进程id)
1、linux查看进程ID。
2、Linux查看进程。
3、linux什么命令查看进程。
4、linux系统进程查看。
1."linux查看进程id,为您提供linux查看进程id图文信息,第一登录linux服务器。
2.输入pgrep+进程名称可获取到pid列表。
3.使用ps-ef|grep+进程名也可查看id。
4.使用top命令查看进程pid。
5.通过ls/proc命令查看进程pid。
进程信息
/proc目录包含了所有正运行的进程目录。这些目录的名字和进程的标识符是一样的。所以,如果你遍历/proc目录下那些使用数字作为它们的名字的目录,你就会获得所有现在正在运行的进程列表。在下面的代码中process_list()函数返回所有现在正在运行的进程的标识符列表。当你执行这个程序后,这个列表的长度就是在系统上运行的总进程数。
复制代码 代码如下:
#!/usr/bin/env python
"""
List of all process IDs currently active
"""
from __future__ import print_function
import os
def process_list():
pids = []
for subdir in os.listdir('/proc'):
if subdir.isdigit():
pids.append(subdir)
return pids
if __name__=='__main__':
pids = process_list()
print('Total number of running processes:: {0}'.format(len(pids)))
上面的程序当执行后会显示和下面类似的输出:
复制代码 代码如下:
Total number of running processes:: 229
每个进程目录包含了一些其他文件和目录,如进程命令的调用,它正使用的共享库以及其它的。
建议看看《Linux就该这么学》这本书
6. 在LINUX内核中,进程标识符PID为1,2 ,3,4,5的进程的名称是什么基本功能是什么
pid=1 :init进程,系统启动的第一个用户级进程,是所有其它进程的父进程,引导用户空间服务。
pid=2 :kthreadd:用于内核线程管理。
pid=3 :migration,用于进程在不同的CPU间迁移。
pid=4 :ksoftirqd,内核里的软中断守护线程,用于在系统空闲时定时处理软中断事务。
pid=5 :watchdog,此进程是看门狗进程,用于监听内核异常。当系统出现宕机,可以利用watchdog进程将宕机时的一些堆栈信息写入指定文件,用于事后分析宕机的原因。
7. linux怎么查询进程和进程的id
用top -u 命令查看进程以及PID。
命令如下:
$ top -u
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
8. 如何修改 Linux 中的进程名
在编写网络服务器程序时,为了响应客户端的请求,我们经常需要新建进程来处理业务流程;而且又是为了关闭某个非法请求或者关闭长连接的客户端,这时就需要杀死进程 killall proc_name。 但是在新建进程时,子进程名与父进程名相同。因此需要由进程名及参数来区分客户端连接。
在linux中prctl可以满足这个要求,下满是man手册:
PR_SET_NAME (since Linux 2.6.9)
Set the process name for the calling process, using the value in
the location pointed to by (char *) arg2. The name can be up to
16 bytes long, and should be null terminated if it contains
fewer bytes.
但是prctl修改的进程名,只能是16个字节(包括'\0')。下面是修改的代码(changetitle.c):
#include <stdio.h>
#include <sys/prctl.h>
int main(int argc, char *argv[], char *envp[])
{
char *new_name = "abcdefghijklmnopqrstuvwxyz";
getchar();
prctl(PR_SET_NAME, new_name);
getchar();
return 0;
}
当新名称长度大于16时就会截断,上面的新名字截断后是abcdefghijklmno。这对于我们来说是有缺陷的。而且通过ps -aux 查看,进程名称并没有改变,改变的只是/prco/$(PID)/stat和
/prco/$(PID)/status的值,而/prco/$(PID)/cmdline并没有改变。这种方式使用起来也是不方便的。
下面介绍另一种方式,可以与上面的方式互补。
首先看一下main函数的原型:int main(int argc, char *argv[]);
argv[0]存放的是终端执行的程序名称也就是进程名。argv[1...argc-1]存放的是命令行参数。
linux中main()还有一个隐藏参数就是环境变量信息,存放了运行时所需要的环境变量。
我们可以通过以下来访问这个变量
extern char **environ;
argv与environ是连续存放在栈区的。下面代码可以查看参数信息:
#include <stdio.h>
#include <string.h>
extern char **environ;
int main(int argc , char *argv[])
{
int i;
printf("argc:%d\n" , argc);
for (i = 0; i < argc; ++i)
{
printf("argv[%d](0x%x):%s\n" , i , (unsigned int)argv[i], argv[i]);
}
printf("evriron=0x%x\n" , (unsigned int)environ[0]);
return 0;
}
通过上面可以看出,我们只需要修改argv[0]所指向的内存空间的内容,就可以修改进程名。但是如果新名称比argv[0]的长度小,我们可以直接修改,并把多余的部分请0,如果新名称
比argv[0]长我们需要两步:
1、申请新内存保存环境变量信息和argv[1...argc-1]参数信息
2、修改argv[0],将新名称往后到environ的最后一项清0
以下是参考代码:
#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <sys/prctl.h>
# define MAXLINE 2048
extern char **environ;
static char **g_main_Argv = NULL; /* pointer to argument vector */
static char *g_main_LastArgv = NULL; /* end of argv */
void setproctitle_init(int argc, char **argv, char **envp)
{
int i;
for (i = 0; envp[i] != NULL; i++) // calc envp num
continue;
environ = (char **) malloc(sizeof (char *) * (i + 1)); // malloc envp pointer
for (i = 0; envp[i] != NULL; i++)
{
environ[i] = malloc(sizeof(char) * strlen(envp[i]));
strcpy(environ[i], envp[i]);
}
environ[i] = NULL;
g_main_Argv = argv;
if (i > 0)
g_main_LastArgv = envp[i - 1] + strlen(envp[i - 1]);
else
g_main_LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
}
void setproctitle(const char *fmt, ...)
{
char *p;
int i;
char buf[MAXLINE];
extern char **g_main_Argv;
extern char *g_main_LastArgv;
va_list ap;
p = buf;
va_start(ap, fmt);
vsprintf(p, fmt, ap);
va_end(ap);
i = strlen(buf);
if (i > g_main_LastArgv - g_main_Argv[0] - 2)
{
i = g_main_LastArgv - g_main_Argv[0] - 2;
buf[i] = '\0';
}
(void) strcpy(g_main_Argv[0], buf);
p = &g_main_Argv[0][i];
while (p < g_main_LastArgv)
*p++ = '\0';
g_main_Argv[1] = NULL;
prctl(PR_SET_NAME,buf);
}
int main(int argc, char *argv[])
{
char argv_buf[MAXLINE] = {0}; // save argv paramters
for(int i = 1; i < argc; i++)
{
strcat(argv_buf, argv[i]);
strcat(argv_buf, " ");
}
setproctitle_init(argc, argv, environ);
setproctitle("%s@%s %s", "new_name", "ip", argv_buf);
for (int i = 0; environ[i] != NULL; i++)
free(environ[i]);
getchar();
return 0;
}
上面的代码使用了prctl和修改argv[0]两种修改方法的结合,通过ps -a 、 ps -ef 、ps -aux、 top 等等命令都只能查询到新进程名,/proc/$PID/ 下的文件也显示了新进程名的信息。
应用场景:
1、标识父子进程名称,防止被误杀
2、构造假的进程名及参数,引导非法进入人员到蜜罐系统,取证