更改进程名字 prctl函数

2024-06-05 12:38

本文主要是介绍更改进程名字 prctl函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

prctl()函数应用

t prctl(int option,unsigned longarg2,unsigned long arg3,unsigned long arg4,unsigned long arg5)

这个系统调用指令是为进程制定而设计的,明确的选择取决于option:
PR_GET_PDEATHSIG :返回处理器信号;
 
PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。
 
PR_GET_DUMPABLE :返回处理器标志dumpable;
 
PR_SET_DUMPABLE :arg2作为处理器标志dumpable被输入。
 
PR_GET_NAME :返回调用进程的进程名字给参数arg2; (Since Linux2.6.9)
 
PR_SET_NAME :把参数arg2作为调用进程的经常名字。(SinceLinux 2.6.11)
 
PR_GET_TIMING :
 
PR_SET_TIMING :判定和修改进程计时模式,用于启用传统进程计时模式的
 
PR_TIMING_STATISTICAL,或用于启用基于时间戳的进程计时模式的
 
PR_TIMING_TIMESTAMP。
 
CAP_CHOWN功能:
在一个_POSIX_CHOWN_RESTRICTED功能定义的系统。这会越过改变系统文件所有者和组所有的权限
 
CAP_DAC_OVERRIED功能:
如果_POSIX_ACL定义,就会越过所有的DAC访问,包括ACL执行访问,用CAP_LINUX_IMMUTABLE功能来排除
DAC的访问
 
CAP_DAC_READ_SEARCH功能:
如果_POSIX_ACL定义,就会越过所有的DAC的读限制,
 并在所有的文件和目录里搜索,包括ACL限制。用CAP_LINUX_IMMUTABLE来限制DAC访问
 
CAP_FOWNER功能:
 越过文件说有的允许限制,如文件的所有者ID必须和用户ID一样,除了CAP_FSETID可用。它不会越过MAC和DAC限制
 
CAP_FSETID功能:
越过当设置文件的S_ISUID和S_ISGID位的时候,用户的ID必须和所有者ID匹配的限制,设置S-ISGID位的时候,组ID
必须和所有者ID匹配的限制,用chown来设置S_ISUID和S_ISGID为的功能限制
 
CAP_FS_MASK功能:
用来回应suser()或是fsuser()。
 
CAP_KILL功能:
一个有有效用户ID的进程发送信号时必须匹配有效用户ID的功能会越过
 
CAP_SETGID功能:
允许setgid() 功能, 允许setgroups()
允许在socket里伪造gid
 
CAP_SETUID功能:
允许set*uid()功能 允许伪造pid在socket
 
CAP_SETPCAP 功能:
把所有的许可给所有的pid。或是把所有的许可删除
 
CAP_LINUX_IMMUTABLE功能:
允许更改S_IMMUTABLE和S_APPEND文件属性
 
CAP_NET_BIND_SERVICE功能:
允许绑定1024下的TCP/UDP套接字
 
CAP_NET_BROADCAST功能:
允许广播,监听多点传送
 
CAP_NET_ADMIN功能:
 允许配置接口
允许管理IP防火墙IP伪装和帐户
允许配置socket调试选项
允许修改路由表
允许配置socket上的进程的组属性
允许绑定所有地址的透明代理
允许配置TOS(服务类型)
允许配置混杂模式
允许清除驱动状态
允许多点传送
允许读或写系统记录
 
CAP_NET_RAW功能:
允许用RAW套接字
允许用PACKET套接字
 
CAP_IPC_LOCK功能:
允许琐定共享内存段
允许mlock和mlockall
 
CAP_IPC_OWNER功能:
越过IPC所有权检查
 
CAP_SYS_MODULE功能:
 插入或删除内核模块
 
CAP_SYS_RAWIO功能:
允许ioperm/iopl和/dev/prot的访问
允许/dev/mem和/dev/kmem访问
允许块设备访问(/dev/[sh]d??)
 
CAP_SYS_CHROOT功能:
允许chroot()
 
CAP_SYS_PTRACE功能:
允许ptrace()任何进程
 
CAP_SYS_PACCT功能:
允许配置进程帐号
 
CAP_SYS_ADMIN功能:
允许配置安全钥匙
允许管理随机设备
允许设备管理
允许检查和配置磁盘限额
允许配置内核日志
允许配置域名
允许配置主机名
允许调用bdflush()命令
允许mount()和umount()命令
允许配置smb连接
允许root的ioctls
允许nfsservctl
允许VM86_REQUEST_IRQ
允许在alpha上读写pci配置
允许在mips上的irix_prctl
允许刷新所有的m68k缓存
 允许删除semaphores
用CAP_CHOWN去代替"chown"IPC消息队列,标志和共享内存
允许锁定或是解锁共享内存段
允许开关swap
允许在socket伪装pids
允许设置块设备的缓存刷新
允许设置软盘驱动器
允许开关DMA开关
允许管理md设备
允许管理ide驱动
允许访问nvram设备
允许管理apm_bios,串口或是bttv电视设备
允许在isdn CAPI的驱动下生成命令
允许读取pci的非标准配置
允许DDI调试ioctl
允许发送qic-117命令
允许启动或禁止SCSI的控制和发送SCSI命令 允许配置加密口令在回路文件系统上
 
CAP_SYS_BOOT功能:
允许用reboot() 命令
 
CAP_SYS_NICE功能:
允许提高或设置其他进程的优先权
允许在自己的进程用FISO和实时的安排和配置
 
CAP_SYS_RESOURCE功能:
越过资源限制,设置资源限制
越过配额限制
越过保留的ext2文件系统
允许大于64hz的实时时钟中断
越过最大数目的控制终端
越过最大数目的键
 
CAP_SYS_TIME功能:
允许处理系统时钟
允许_stime
允许设置实时时钟
 
CAP_SYS_TTY_CONFIG功能:
 允许配置终端设备
允许vhangup()终端
 
返回值
 
PR_GET_DUMPABLE 和 PR_GET_KEEPCAPS 成功时返回0或者1。其他的option值都是成功时返回0。
错误时返回 -1,并设置相应的错误号。
 
EINVAL————option的值不正确,或者当它是PR_SET_PDEATHSIG时,参数arg2的值不是0或者信号数字。
 
EBADF————无效的描述符
 
实例:于多线程应用程序,如果能够给每个线程命名,那么调试起来的便利是不言而喻的。
#include<stdio.h>
#include<pthread.h>
#include<sys/prctl.h>


void* tmain(void*arg)
{
char name[32];
prctl(PR_SET_NAME,(unsignedlong)"xx");
prctl(PR_GET_NAME,(unsignedlong)name);
printf("%s/n", name);
while(1)
sleep(1);
}


int main(void)
{
pthread_t tid;
pthread_create(&tid,NULL, tmain,NULL);
pthread_join(tid,NULL);


return 0;
}
编 译并运行:
 
xiaosuo@gentux test $ gcc t_threadname.c -lpthread
xiaosuo@gentux test $ ./a.out
 xx
在 另一个终端,通过ps找到a.out的pid:
xiaosuo@gentux test $ ps aux | grep a.out
 xiaosuo 29882  0.0  0.0 14144   544 pts/6    Sl+ 16:23   0:00 ./a.out
 
看命名是否奏效:
 
xiaosuo@gentux test $ cd /proc/29882/task/
xiaosuo@gentux task $ ls
29882 29883
xiaosuo@gentux task $ cd 29883/
xiaosuo@gentux 29883 $ cat cmdline
./a.outxiaosuo@gentux 29883 $
 
有点儿郁闷,cmdline显示的竟然还是./a.out。通过 运行时打印的xx和strace检查prctl的返回值确认prctl确实成功运行。怀疑这个名字只能通过prctl获得,有点儿失落,可心仍不甘。查看 ps的man,并实验,终于找到了"xx":
xiaosuo@gentux 29883 $ ps -L -p 29882
  PID   LWP TTY          TIME CMD
 29882 29882 pts/6    00:00:00 a.out

 29882 29883 pts/6    00:00:00 xx


Linux下进程重命名的方法:


使用系统函数prctl(),声明如下:


#include <sys/prctl.h>


int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
具体用法请参考http://www.kernel.org/doc/man-pages/online/pages/man2/prctl.2.html


 进程重命名代码:


prctl(PR_SET_NAME, “process_name”, NULL, NULL, NULL);
第一个参数是操作类型,指定PR_SET_NAME,即设置进程名


第二个参数是进程名字符串,长度至多16字节
 



from: http://blog.csdn.net/zuokong/article/details/7318154

这篇关于更改进程名字 prctl函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033078

相关文章

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C