`
haoningabc
  • 浏览: 1477073 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shellinabox笔记1----prctl

阅读更多
prctl给线程命名和线程的一些操作

注意这里命名线程名称为xx
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/prctl.h>
void* test(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, test, NULL); 
pthread_join(tid, NULL); 
return 0; 
}

编译并运行:

gcc prctl.c -l pthread
./a.out


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

[root@killinux ~]# ps -ef|grep a.ou
root      9764  8870  0 12:43 pts/2    00:00:00 ./a.out
root      9768  9747  0 12:43 pts/4    00:00:00 grep a.ou
[root@killinux ~]# cd /proc/9764
[root@killinux 9764]# cd task/
[root@killinux task]# ls
9764  9765
[root@killinux task]# pwd
/proc/9764/task
[root@killinux task]# cd 9765/
[root@killinux 9765]# ls
attr    clear_refs  cwd      fd      limits    mem        numa_maps  oom_score_adj  root       sessionid  stat    syscall
auxv    cmdline     environ  fdinfo  loginuid  mountinfo  oom_adj    pagemap        sched      smaps      statm   wchan
cgroup  cpuset      exe      io      maps      mounts     oom_score  personality    schedstat  stack      status
[root@killinux 9765]# cat cmdline 
./a.out[root@killinux 9765]# 


看命名是否奏效:
两个task的名字都是a.out
看线程名字用,线程的名字“xx”在这

[root@killinux 9764]# ps -L -p 9764
  PID   LWP TTY          TIME CMD
9764  9764 pts/2    00:00:00 a.out
9764  9765 pts/2    00:00:00 xx
[root@killinux 9764]#
-----------------------------------------------------------
stat文件和status文件中也有

[root@killinux 9764]# cat stat
9764 (a.out) S 8870 9764 8870 34818 9764 4202496 172 0 0 0 0 0 0 0 20 0 2 0 176577389 16850944 136 18446744073709551615 4194304 4196556 140734883346416 140734883346080 255523324077 0 0 0 0 18446744071579515721 0 0 17 3 0 0 0 0 0
[root@killinux 9764]# cd -
/proc/9764/task
[root@killinux task]# cd -
/proc/9764/task/9764
[root@killinux 9764]# cd ../9765/
[root@killinux 9765]# cat stat
9765 (xx) S 8870 9764 8870 34818 9764 4202560 17 0 0 0 0 0 0 0 20 0 2 0 176577389 16850944 136 18446744073709551615 4194304 4196556 140734883346416 140599854898320 255519799581 0 0 0 0 18446744071579464804 0 0 -1 0 0 0 0 0 0
[root@killinux 9765]# cat status
Name: xx
State: S (sleeping)
Tgid: 9764
Pid: 9765
PPid: 8870
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
Utrace: 0
FDSize: 256
Groups: 0
VmPeak:    16456 kB
VmSize:    16456 kB
VmLck:        0 kB
VmHWM:      544 kB
VmRSS:      544 kB
VmData:    10440 kB
VmStk:       88 kB
VmExe:        4 kB
VmLib:     1792 kB
VmPTE:       44 kB
VmSwap:        0 kB
Threads: 2
SigQ: 1/62815
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: ffffffffffffffff




参考
http://www.cnblogs.com/sunyubo/archive/2010/12/10/2282086.html
这个头文件不全
分享到:
评论

相关推荐

    perl 离线安装rpm包

    1. **获取Perl RPM包**:在有网络的环境中,你可以通过`yum download`命令或访问官方或第三方RPM存储库下载Perl的RPM包。确保下载与你的CentOS版本兼容的版本。 2. **传输RPM包**:将下载的Perl RPM包通过USB驱动器...

    ubuntu-version `GLIBC-2.25` not found.pdf

    ../configure --prefix=/usr/glibc2.25 -I../include/ -include../include/unistd.h -include../include/prctl.h ``` 这些参数确保configure脚本能在正确的目录中查找头文件。 #### 五、注意事项 - 在进行任何...

    bluetooth-autoconnect:一个Linux命令行工具,可自动连接到所有配对并信任的蓝牙设备

    需要python3 , python-prctl , python-dbus和bluez 安装 如果已将其打包以用于其他Disto,请打开一个问题或PR,以便可以将说明添加到此列表中。 Arch Linux 从安装AUR软件包 使用sudo systemctl enable bluetooth...

    Linux系统调用函数

    - **返回值**:成功时不返回,失败时返回-1。 - **用途**:替换当前进程的映像,用于执行新的程序。 **exit** - **功能**:中止进程。 - **参数**:退出状态码。 - **返回值**:无。 - **用途**:正常结束进程。 *...

    Linux系统调用列表

    如果失败,则返回-1并设置errno。 **exit** - **功能**: 终止进程。这是进程正常结束的标准方式。 - **返回值**: 不会返回给调用者。该进程的状态信息(退出状态)会传递给父进程。 **_exit** - **功能**: 立即...

    开源项目-xfernando-go2seccomp.zip

    1. **Seccomp基础知识**: - Seccomp是一种内核级别的安全特性,它允许程序设定一个“过滤器”,这个过滤器会检查每个系统调用,只有符合规则的调用才会被执行。 - 它最初是为了解决安全性和性能问题,尤其是对于...

    setthreadname.rar

    `prctl()`定义在`&lt;sys/prctl.h&gt;`头文件中,其基本用法如下: ```cpp #include &lt;sys/prctl.h&gt; #include void set_thread_name(const std::string& name) { pid_t tid = syscall(SYS_gettid); // 获取当前线程...

    Oracle 10g R2 for Solaris x86在Solaris 11上的安装

    # prctl -n project.max-shm-memory -v 4gb -r -i project group.dba # projmod -s "project.max-shm-memory=(privileged,4294967295,deny)" group.dba ``` #### 四、执行安装 完成上述准备步骤后,可以开始...

    linux 系统函数

    - **参数**: 输入值必须位于[-1,1]区间内。 - **应用场景**: 常用于数学计算和图形学领域。 5. **acosh、acoshf、acoshl** - **功能**: 计算反双曲余弦值。 - **输入限制**: 输入必须是非负值。 6. **asin、...

    Linux系统调用列表.doc

    1. **进程控制**: - `fork()`:创建一个与当前进程几乎完全一样的新进程,新进程被称为子进程。 - `clone()`:类似于`fork()`, 但提供了更多定制选项,如共享某些资源。 - `execve()`:替换当前进程的内存映像,...

    liuux的系统调用大全

    1. **进程控制**: - `fork()`:创建一个新的进程,新进程与原进程共享大部分资源,但拥有独立的进程ID。 - `clone()`:更灵活的进程创建方式,允许按指定条件创建子进程,如共享某些资源。 - `execve()`:用新的...

    setprocititle.zip

    setproctitle库的核心功能是通过调用底层操作系统接口(在Unix系统中通常是`prctl()`或`sched_setparam()`,在Windows中则可能涉及其他APIs)来修改进程标题。这样,当使用`ps`或者`tasklist`等命令查看进程时,可以...

    linux 内存管理 start_kernel

    1. 页面分配器初始化(page_alloc_init):这是内存管理的基础,负责初始化内核的页面分配器,为后续的内存请求提供基础的内存管理功能。 2. 内存区域管理初始化(build_all_zonelists):Linux内核将物理内存分为...

    cpp-GameMode实现按需优化Linux系统性能

    1. **进程管理**:理解Linux下的进程调度机制,如 Completely Fair Scheduler (CFS) 和实时调度策略(如SCHED_FIFO、SCHED_RR)。 2. **系统调用**:使用`prctl`、`sched_setscheduler`等系统调用来改变进程调度...

    系统调用表可以作为索引使用

    1. **进程控制** - **fork**: 创建一个新进程。新进程几乎与父进程完全相同,但拥有自己的进程ID。 - **clone**: 允许更细粒度的控制来创建子进程,如共享内存段等。 - **execve**: 用于替换当前进程映像,加载...

    linux常用函数中文列表

    ##### 1. `fork` 创建一个新进程 - **功能**: 创建一个与父进程几乎完全相同的副本。 - **返回值**: 在父进程中返回子进程ID,在子进程中返回0。 - **应用场景**: 适用于创建子进程执行不同的任务或程序。 - **注意...

    Process operations-开源

    压缩包内的“prctl-1.6”可能是该开源工具的一个版本,名为“prctl”,可能是“process control”的缩写,它提供了一系列的系统调用来控制进程属性。版本号1.6表示这是该工具的第1.6次更新,通常意味着修复了之前...

Global site tag (gtag.js) - Google Analytics