#include <sys/prctl.h>
int prctl(int option, unsigned long arg2, 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 <unistd.h>
#include <pthread.h>
#include <sys/prctl.h>void* tmain(void* arg)
{char name[32];prctl(PR_SET_NAME, (unsigned long)"xx");prctl(PR_GET_NAME, (unsigned long)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字节

转载自:https://blog.csdn.net/fivedoumi/article/details/24407779

另外,可以参考文章:https://blog.csdn.net/caspiansea/article/details/12073571

C语言:prctl函数的用法相关推荐

  1. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  2. C语言“fread”函数的用法?

    C语言"fread"函数的用法为"size_tf read(void *buffer,size_t size,size_t count,FILE *stream)&quo ...

  3. linux之getcwd函数解析,Linux 中C语言getcwd()函数的用法

    Linux 中C语言getcwd()函数的用法 先来看该函数的声明: #include char *getcwd(char *buf,size_t size); 介绍: 参数说明:getcwd()会将 ...

  4. c语言get()的作用,c语言get函数的用法有哪些

    C语言中gets从标准输入设备读字符串函数,可以无限读取,不会判断上限,今天学习啦小编在这里为大家介绍C语言get函数的用法,欢迎大家阅读! c语言get函数的用法:int getc(FILE *st ...

  5. R语言 diag函数的用法

    R语言 diag函数的用法 我们今天写一下关于R语言中diag函数的用法: (1)diag函数可以用来提取矩阵的对角元素,并将它保存成向量的格式.值得注意的是,如果所要提取的矩阵不是方阵的话,diag ...

  6. C语言 strstr函数的用法及模拟实现strstr函数

    C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...

  7. 计算机科学类专升本复习之“C语言fopen函数的用法”详解(初稿)

    C语言fopen函数的用法,C语言打开文件详解 在C语言中,"操作文件" 之前 必须 先"打开文件"; 所谓"打开文件",就是让 " ...

  8. c语言fread函数,C语言“fread”函数的用法?

    C语言"fread"函数的用法? C语言"fread"函数的用法为"size_tf read(void *buffer,size_t size,siz ...

  9. c语言memcpy是什么,C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...

  10. C语言time()函数的用法

    文章目录 time()函数 1. time()函数的用途 2. time()函数的头文件 3. time()函数返回的数据类型 4. time()函数使用示例 localtime函数 例子1 例子2 ...

最新文章

  1. 公共方法-完整的for循环-for else
  2. 开放源代码GIS资源集锦
  3. Could not find a file system implementation for scheme ‘hdfs‘.
  4. 行末没有空格c语言,新人提问:如何将输出时每行最后一个空格删除
  5. C#LeetCode刷题-贪心算法
  6. 技术人生:给自己安慰的10句温馨话
  7. 2019-5-5学习心得
  8. codeforces 702A A. Maximum Increase(水题)
  9. Linux SocketCan client server demo hacking
  10. 电信网通竞合协议事件升级 内部文件泄露曝裂痕
  11. Linux系统编程之线程(三)
  12. java毕业设计演唱会门票订售及管理系统Mybatis+系统+数据库+调试部署
  13. 全球及中国阻力带行业市场前瞻及投资竞争力分析报告2022-2027年
  14. 用C语言编写的骂人的软件,“骂人软件”再智能 暴力永远是暴力
  15. elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
  16. Pandas合并excel文件错位现象的解决
  17. 在ubuntu系统上安装指定版本的gfortran
  18. excel怎么更改坐标轴刻度_excel数值坐标轴刻度(excel表格插入图表里坐标轴的刻度能自定义设置吗)...
  19. 标题:关于high-speed Charting Control配置过程中一些问题(ChartCtrl新手向)vs2019+win10-2020.12.11
  20. idea2020.3配置点击mapper中的方法跳转到对应得xml中

热门文章

  1. html++转义函数,转义函数escapeHTML和unescapeHTML
  2. Mobox物料编码管理系统在企业应用
  3. Logisim-Arithmatic Library
  4. 17:计算三角形面积
  5. 交互设计定律:米勒定律(Miller’s law)
  6. xmind8 破解激活教程,亲测可用
  7. 配置echarts下载图片分辨率,以及报错解决
  8. UE5蓝图时间轴摄影机路径动画
  9. java启动慢,Eclipse启动慢的问题
  10. Flink1.8 on yarn 环境搭建及使用