Linux 下 prctl 进程控制

Linux下可通过 prctl进行进程各种控制

       #include <sys/prctl.h>int prctl(int option, unsigned long arg2, unsigned long arg3,unsigned long arg4, unsigned long arg5);
  • option :第一个参数是 int ,描述函数操作类型。比如:PR_SET_NAME 这个操作在(linux 2.6.9 中引入),设置线程的名
  • arg2 参是指向 char* 的 指针,这里用一个 16 字节长度的无符号长整型来表示 char arg2[16] ,名字最长为16个字节
    ,包括结束符(超过16个字节,名称自动被截断) 。

设置线程名字 PR_SET_NAME

主要实现其实就是2行代码:

int main(int argc, char *argv[])
{char *thread_name = "Park";strcpy(argv[0], thread_name);prctl(PR_SET_NAME, thread_name,16);
}

获取线程名 PR_GET_NAME (since Linux 2.6.11)

第二个参数此时用来返回调用线程的名称。缓冲区应允许最多16个字节的空间;返回的字符串将以空结尾。

用于进程重命名,主进程、子进程使用不同的命令,便于命令ps -ef查看。

#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h># define MAXLINE 2048#define Linux#ifdef Linux#include <sys/prctl.h>
#endifextern char **environ;static char  **g_main_Argv = NULL;    /* pointer to argument vector */
static char  *g_main_LastArgv = NULL; /* end of argv */void prename_setproctitle_init(int argc, char **argv, char **envp)
{int i;for (i = 0; envp[i] != NULL; i++)continue;environ = (char **) malloc(sizeof (char *) * (i + 1));for (i = 0; envp[i] != NULL; i++)environ[i] = strdup(envp[i]);//xstrdup(envp[i]);environ[i] = NULL;g_main_Argv = argv;if (i > 0)g_main_LastArgv = envp[i - 1] + strlen(envp[i - 1]);elseg_main_LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
}void prename_setproctitle(const char *fmt, ...)
{char *p;int i;char buf[MAXLINE];extern char **g_main_Argv;extern char *g_main_LastArgv;va_list ap;p = buf;va_start(ap, fmt);vsprintf(p, fmt, ap);va_end(ap);i = strlen(buf);if (i > g_main_LastArgv - g_main_Argv[0] - 2){i = g_main_LastArgv - g_main_Argv[0] - 2;buf[i] = '\0';}(void) strcpy(g_main_Argv[0], buf);          //该句是核心,把新的名字copy到 argv[0]p = &g_main_Argv[0][i];while (p < g_main_LastArgv)*p++ = '\0';//SPT_PADCHAR;g_main_Argv[1] = NULL;#ifdef Linuxprctl(PR_SET_NAME,buf);
#endif}
int main(int argc, char *argv[], char *envp[])
{pr_setproctitle_init(argc, argv, envp);pr_setproctitle("%s:%s", "test_very_long_user_name_in_process_name", "192.168.123.145");while(1)sleep(10);return 0;
}

Linux下 prctl 进程控制相关推荐

  1. 操作系统实验:Linux下的进程控制实验

    进程控制实验 一.实验目的: 二.实验平台: 三.实验内容: 1.进程的创建与销毁 进程控制相关函数 实验结果分析 2.多进程并发执行 time命令 实验结果分析 四.总结分析 一.实验目的: 加深对 ...

  2. Linux下的进程控制原语【pid_t,fork,exec,wait,waitpid,getpid,kill,pasue,sleep,signal】

    目录 一.pid_t 进程号类型 二.与进程创建.执行有关的系统调用说明 fork()系统调用: exec 系统调用: wait() 和 waitpid() 系统调用: getpid()系统调用语法: ...

  3. Supervisor-类unix系统下的进程控制工具

    如果你的英文足够好,请看官网的文档:http://supervisord.org/introduction.html 简介: Supervisor 类unix系统下的进程控制工具. 特性: 1.配置简 ...

  4. linux系统调用劫持隐藏进程,linux 下隐藏进程的一种方法及遇到的坑

    前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫 ...

  5. 【Linux】从冯诺依曼体系到初识Linux下的进程

    目录 前言 1.冯诺依曼体系结构 2.管理和操作系统 3.初识进程 1.描述进程PCB(process control block) 1.标识符pid fork接口创建子进程 2.进程状态 3.进程优 ...

  6. Linux第二次试验:Linux下的进程通信实验

    Linux第二次试验:Linux下的进程通信实验 前言 一.实验目的 二.实验工具与设备 三.实验预备知识 三.实验内容和步骤 五.实验代码及步骤截图 六.实验总结 前言 为了帮助同学们完成痛苦的实验 ...

  7. linux 下得到进程的启动时间

    linux 下得到进程的启动时间! 运行方式:./pstart 进程号 " 如: ./pstart 1 #!/bin/bash pid=$1 if [ "$pid" == ...

  8. linux下查看进程占用端口和端口占用进程命令

    Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...

  9. linux下杀死进程全权讲解

    linux下杀死进程全权讲解 2009-10-27 08:57 佚名 linux 我要评论(0) 字号:T | T 本文将详细讲解linux杀死进程的多种命令,包含他们的作用,kill作用:根据进程号 ...

最新文章

  1. R语言plotly包可视化线图(line plot)、使用restyle参数自定义设置可视化结果中线条的颜色、使用按钮动态切换线条的颜色(change line color with button)
  2. 开发日记-20190403
  3. 【LeetCode从零单排】No26.Remove Duplicates from Sorted Array
  4. Android控件布局属性全解(一看就会)
  5. 秒杀设计--mysql的锁机制应用和redis方案
  6. 某一个物种能够在 1 分钟之内干掉资深程序员...网友称:恐怖如斯!
  7. SWIFT4.0学习01 - 函数的命名、调用以及注意事项
  8. less最后一页 linux_必备linux命令有哪些?你了解多少
  9. 10年老电脑如何提速_2020年10月和双十一轻薄本/轻薄型笔记本电脑如何挑选?内含轻薄本/轻薄型笔记本电脑推荐!...
  10. OpenCV : 图像数字化
  11. LEXYACC--编译界的神
  12. 恩智浦智能汽车竞赛电磁组总结
  13. kali 最详细wifi抓包教程
  14. 计算机一定要学五笔打字吗,学习五笔打字大概要多长时间
  15. 潇洒老师教你注塑模具使用顶针油需要注意的问题
  16. thinkphp5拼接数组查询条件
  17. 微信公众平台-微信服务号开发
  18. 如何用计算机进行文件夹整理,如何对电脑文件进行分类整理,试试下面这四个步骤...
  19. IESM项目实训三——语音合成工具类
  20. ubuntu18.04安装中中文输入法

热门文章

  1. 【Golang实现】B站点赞功能的思考与简单实现
  2. Django(5)-路由配置实例
  3. 【机器学习项目实战】Python实现聚类(Kmeans)分析客户分组
  4. 用lwip发送大量数据时,遇到的问题解答记录
  5. TP5框架查询数据获取结果集为数组的办法
  6. scikit-learn sklearn 0.18 官方文档中文版
  7. 杨坤4月举行首场演唱会 实力唱将吹响集结号
  8. OpenCV图像处理——GUI功能(二)
  9. 微信小程序商城系列之购物车
  10. 幸运彩票 (15分)