91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行prctl()函數應用

發布時間:2021-10-14 10:33:26 來源:億速云 閱讀:172 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關如何進行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字節
 

以上就是如何進行prctl()函數應用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

逊克县| 隆化县| 仁布县| 伊宁县| 武邑县| 三门县| 二连浩特市| 长泰县| 微博| 合山市| 连平县| 电白县| 绥芬河市| 南华县| 北票市| 象州县| 洛川县| 新余市| 虞城县| 融水| 朝阳县| 广德县| 泰和县| 汝州市| 凤山县| 绥江县| 兴仁县| 金堂县| 长宁县| 铜陵市| 敖汉旗| 金平| 城固县| 辉县市| 保德县| 贵南县| 六盘水市| 济宁市| 辽中县| 习水县| 磐石市|