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/include/harfbuzz" 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}