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


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

前后对比:

  • 改名之前的显示

LINUX给进程内容窗口改名的代码_#define

  •  改名之后的显示

LINUX给进程内容窗口改名的代码_#define_02

  •  具体代码
#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}