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

简介: LINUX给进程内容窗口改名的代码

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


ps看到的名

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

前后对比:


改名之前的显示

image.png


改名之后的显示

image.png


具体代码

#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}
目录
相关文章
|
2月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
110 1
|
4天前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
50 34
|
8天前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
39 16
|
1月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
118 20
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
2月前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
2月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
7月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
7月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
220 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
6月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。