prctl()函数应用

Linux—用prctl()给线程命名 阅读详情


int 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

 

strace 后知道这个“xx”竟然隐匿于stat和status:

xiaosuo@gentux 29883$ cat stat         
使用prctl为线程命名 使用prctl的PR_SET_NAME选项功能可以为线程命名,测试代码如下: #include <stdio.h> #include <pthread.h> #include <sys/prctl.h> #include <unistd.h> void *func1(void *arg) { prctl(PR_SET_NAME, "func1"); pause(); } void *func2(void *arg) { prct 阅读详情

相关推荐

fork之子进程随父进程死亡prctl

利用prctl的PR_SET_PDEATHSIG属性设置父进程死亡时,发送给子进程的信号。 int pid; pid = fork() if (pid == 0) { //子进程 //设置父进程死亡时自动给子进程发的信号 prctl(PR_SET_PDEATHSIG, SIGKILL).... } else { //父进程 } 相关属性如下: PR_SET_PDEATHSIG (since Linux 2.1.57) Set the parent death sign

sun172270102的博客 2109

函数 prctl 系统调用

是一个系统调用,用于控制和修改进程的行为和属性。它可以在Linux系统上使用,提供了各种功能和选项来管理进程的不同方面。每个选项都有特定的参数,可以根据需要传递。具体的参数和行为取决于所选的选项。函数将当前进程的名称设置为"MyProcess"。函数时,应该查阅相关文档并了解所使用的操作系统的支持和限制。函数的具体行为和可用选项可能因操作系统和版本而异。选项和参数,用于执行不同的操作。函数获取进程的名称,并将其打印到标准输出。以下是一个简单的示例,展示了如何使用。这些仅是一些常用的选项,

lvxu666的博客 5384

Maxwell中铜导体热损计算的关键步骤与技巧

本文详细介绍了在Maxwell软件中准确计算铜导体热损的关键步骤与实用技巧。重点阐述了如何正确设置涡流场求解器、启用涡流效应、根据工作频率计算并应用肌肤深度以指导网格剖分,以及准确施加激励和定义电流回路。文章还强调了使用温度相关材料属性和进行后处理验证的重要性,旨在帮助工程师获得可靠的热损计算结果,优化产品设计。

weixin_29232121的博客 465

prctl()说明

prctl函数是Linux系统中支持的一个非常重要的函数,它给进程提供了一种在不重新启动进程的情况下,能够改变和调整进程自身行为的能力。越过当设置文件的S_ISUID和S_ISGID位的时候,用户的ID必须和所有者ID匹配的限制,设置S-ISGID位的时候,组ID。然而,由于prctl函数的功能设置复杂,而且涉及到操作系统对进程和资源的控制,如果不小心操作,就可能对系统造成严重的破坏。prctl函数的使用,可以极大地提高进程管理的效率,能够解决资源竞争的问题,也可以更好地提高系统的安全性和稳定性。

fivestar2009的博客 2460

【转】prctl()函数应用

prctl()函数应用 转载 ...

u013827488的博客 223

linux 编程--prctl()函数应用

int prctl ( int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 ) 这个系统调用指令是为进程制定而设计的,明确的选择取决于option: PR_GET_PDEATHSIG :返回处理器信号;   PR_SET_PDEATHSIG :arg2作为处理器信号pd

tmxkwzy的博客 2609

prctl()设定线程名

基本介绍 prctl()原型为int prctl (int __option, …);用于控制主进程或者子进程的属性; 本文主要介绍使用PR_SET_NAME 这个flag设定线程的名字,这个在平常调试中很有帮助,比如想知道哪个线程的CPU占用高; 需要包含的头文件为 sys/prctl.h; 用法:prctl(PR_SET_NAME , (char*)name); 其中设定的名字字符串长度不...

zyj_zhouyongjun183的博客 4686

更改进程名字 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

洛冰翼的专栏 1311

[Linux]进程——备忘

1,SIGPIPE信号: 若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应,此后再写数据,内核将向进程发出SIGPIPE信号,通知进程此连接已经断开。而SIGPIPE信号的默认处理是终止程序,导致上述问题的发生。

知了112的专栏 608

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

1887

Sougou拼音输入法10.4(XP系统可运行)

Sougou拼音输入法10.4(XP系统可运行)

上一篇: C语言函数realloc
下一篇: android权限
thinkinwm
博客等级 码龄17年 346粉丝 50原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值