函数申明

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<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.outxx

在 另一个终端,通过ps找到a.out的pid:

xiaosuo@gentux test $ ps aux | grep a.outxiaosuo 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 29882PID   LWP TTY          TIME CMD29882 29882 pts/6    00:00:00 a.out29882 29883 pts/6    00:00:00 xx

进程重命名

prctl(PR_SET_NAME, “process_name”, NULL, NULL, NULL);
第一个参数是操作类型,指定PR_SET_NAME,即设置进程名
第二个参数是进程名字符串,长度至多16字节

linux c prctl 进程相关 调用指令 简介相关推荐

  1. Linux下 prctl 进程控制

    Linux 下 prctl 进程控制 Linux下可通过 prctl进行进程各种控制 #include <sys/prctl.h>int prctl(int option, unsigne ...

  2. linux下git的相关操作指令

    linux下git的相关操作指令 git版本管理工具 1.克隆仓库git clone "url" 2.上传2.1标记:告诉git工具需要管理那些文件了git add [filena ...

  3. Linux下的进程相关编程

    fork()系统调用 fork的作用是根据一个现有的进程复制出一个新 进程,原来的进程称为父进程(Parent Process) ,新进程称为子进程(Child Process).系统中 同时运行着很 ...

  4. WSL2——Linux C中进程相关操作编程问题

    问题描述 1.lockf函数无效 https://shentuzhigang.blog.csdn.net/article/details/110878697 2.共享内存的系统调用异常 https:/ ...

  5. Linux创建进程必须fork么,Linux - fork() 创建进程

    Linux - fork() 创建进程 Linux - fork() 创建进程 介绍创建进程之前,先简单地介绍一下 Linux 下的进程内存布局. Stack - 所有函数的 local variab ...

  6. 【Linux 内核】进程管理 ( 系统调用简介 | 进程相关系统调用源码 )

    文章目录 一.系统调用简介 二.进程相关系统调用源码 一.系统调用简介 在开发应用程序时 , 进行 " 进程创建 " , 调用的 fork() , vfork() , clone( ...

  7. linux下查找进程及终止进程操作的相关命令

    转自http://hi.baidu.com/mcspring/item/b638a9288e2d3fcfdcf69a8e 使用linux操作系统,难免遇到一些软件"卡壳"的问题,这 ...

  8. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  9. 【Linux 内核】进程管理 ( 进程相关系统调用源码分析 | fork() 源码 | vfork() 源码 | clone() 源码 | _do_fork() 源码 | do_fork() 源码 )

    文章目录 一.fork 系统调用源码 二.vfork 系统调用源码 三.clone 系统调用源码 四._do_fork 函数源码 五.do_fork 函数源码 Linux 进程相关 " 系统 ...

最新文章

  1. [Vue.js进阶]从源码角度剖析vue-router(三)
  2. 02.规划过程组表格-需求管理计划
  3. php-fpm.conf 解析
  4. 洛谷 - P2763 试题库问题(最大流+路径打印)
  5. 博客转移至 https://www.babac.cn/
  6. 计算机二级web题目(8.2)--基本操作题2
  7. 修改win10我的文档下载等移动别处
  8. 根据一个数字日期,判断这个日期是这一年的第几天
  9. d3.js(v5.7)树状图
  10. 消息中间件学习总结(13)——Kafka与RocketMQ的单机系统可靠性比较分析
  11. Android开发四大组件
  12. Digilent提供的Pmod AD1驱动程序
  13. Pigeon发布流程
  14. 使用360浏览器转换编码,可破解乱码
  15. Linux安装视频播放器
  16. 【qsort函数实现】
  17. Gitflow(git工作流)
  18. PHP调用微信消息订阅推送
  19. 单片机结构和原理讲解!
  20. Chrome-谷歌邮箱gmail,登录问题”刚刚有人试图使用您的密码通过非 Google 应用登录您的帐号。Google 已阻止此次登录尝试,但您应进行检查,了解发生了什么情况......“

热门文章

  1. 思科仿真实验--RIP协议动态路由配置
  2. 如何用Postman写接口文档,团队协作开发
  3. 直接标价法与间接标价法的区别
  4. weigm怎么下载_weigm.cn
  5. H5+css3面试题总结
  6. 第十二章 初识Linux三剑客
  7. 微信小程序swiper图片尺寸_微信小程序 - swiper 高度自适应
  8. pogoplug文件服务器,简易NAS:Pogoplug Pogoplug Series 4家庭数据备份中心
  9. 每周推荐短视频:“一代鞋王”百丽成功转型的本质是什么?
  10. matlab中的for语句,matlabfor语句