LINUX给进程改名的代码

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX给进程改名的代码相关的知识,希望对你有一定的参考价值。

  LINUX进程名,初步看有两种:

  • ps看到的名
  • 图形进程名?在任务栏上显示和分组用到。

前后对比:

  • 改名之前的显示

  •  改名之后的显示

  •  具体代码

#include <stdio.h>
#include <gtk/gtk.h>
#include <stdlib.h>
#include <sys/prctl.h>

#define WINDOW_WIDTH  500
#define WINDOW_HEIGHT 300

#define WINDOW_BG_COLOR_R 0x0000
#define WINDOW_BG_COLOR_G 0x0000
#define WINDOW_BG_COLOR_B 0xFFFF

#define WINDOW_TITLE      "泰山Office"


/*创建示例窗口*/
static void start_window()

    GtkWidget *window;
    GdkColor color;

    window = gtk_window_new(    GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(    GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), WINDOW_WIDTH, WINDOW_HEIGHT);
    gtk_window_set_title(       GTK_WINDOW(window), WINDOW_TITLE);

    color.red   = WINDOW_BG_COLOR_R;
    color.green = WINDOW_BG_COLOR_G;
    color.blue  = WINDOW_BG_COLOR_B;    
    gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);

    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show(window);


static void setName4TaskBar(int argc, char **argv, const char *title)

#if 1
   strcpy(argv[0], title);
#else
    //从代码分析来看,可以直接修改
    char*  pLast;
    char*  pFirst;

    size_t size = 0;
    pLast = argv[0];
    for (int i = 0; i<argc; ++i) 
        pLast = argv[i] + strlen(argv[i]) + 1;
    

    pLast += strlen(pLast);

    pFirst = argv[0];
    argv[1] = NULL;

    memset( pFirst, 0x00,  pLast - pFirst);
    strncpy(pFirst, title, pLast - pFirst);
#endif


static void setNameForPsCommand(const char* pName)

    prctl(PR_SET_NAME, pName);


int main(int argc,char *argv[])

    for (int i = 0; i<argc; ++i)
    
        printf("%d=%s\\n", i, argv[i]);
     
 
    //在任务栏上分组用到
    setName4TaskBar(argc, argv, "Office 4 TaskBar");

    //运行程序,另起一个终端,使用ps -a就可以看到这个。
    setNameForPsCommand("Office 4 ps");

    gtk_init(NULL, NULL);
 
    start_window();
 
    gtk_main();
 
    return 0;

  • 编译脚本
#!/bin/bash

COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/gtk-2.0"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/glib-2.0"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/pango-1.0"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/cairo"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/gdk-pixbuf-2.0"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/include/atk-1.0"

COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
COMPILE_INCLUDE=$COMPILE_INCLUDE" -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include"

COMPILE_LINK=$COMPILE_LINK" -lgobject-2.0 -lgtk-x11-2.0"

OUTPUT_FILE=test
if [ -f $OUTPUT_FILE ]; then
    rm $OUTPUT_FILE
fi
echo $COMPILE_INCLUDE_LINK
gcc \\
    -o $OUTPUT_FILE \\
    gtk.cpp \\
    $COMPILE_INCLUDE \\
    $COMPILE_LINK

以上是关于LINUX给进程改名的代码的主要内容,如果未能解决你的问题,请参考以下文章

全网首发:LINUX给进程改名的第二种方法

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段

linux c 退出进程的代码

linux c 退出进程的代码

linux 给文件改名的命令

在 Python 多处理进程中运行较慢的 OpenCV 代码片段