精华内容
下载资源
问答
  • 修改程序进程名
    千次阅读
    2021-05-09 02:29:26

    一、linux中的进程名

    linux中有很多查看/操作进程的命令。

    这些命令的参数或显示的结果,有的是真实的进程名(top/pstree/pgrep/kill/killall),有的是进程的命令行参数(ps)。

    例如:有一个进程a.out,运行方式为:./a.out arg1 arg2

    这时如果用ps查看出来的结果是:./a.out arg1 arg2,即argv的内容。

    如果用top查看出来结果则是 a.out,kill/killall也必须以a.out为参数。

    所以,在修改进程名时,也有两种方法:1 修改真实的进程名, 2 修改命令行参数,或者两种兼用。

    二、修改真实的进程名

    修改真实的进程名只需要用到函数prctl():

    #include 

    int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);

    prctl()还有很多其它用处,这里就不多说了,以下是修改进程名的代码。

    prctl( PR_SET_NAME, "procname", 0, 0);

    三、修改命令行参数

    修改命令行参数只需要单纯修改 char **argv中的字符串就可以达到效果。

    但是:在进程内存中,命令行参数存储地址的后面(更高的地址),存储了进程的环境表。为了保护整个进程的运行环境,必须在修改之前备份命令行参数及环境表。

    总结

    以上是编程之家为你收集整理的linux修改进程名全部内容,希望文章能够帮你解决linux修改进程名所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    更多相关内容
  • 易语言改变运行中的程序名源码,改变运行中的程序名,MoveFileA,MoveFileExA
  • 易语言改进程ID源码
  • 如何修改java程序进程名把javaw.exe改名 同样的,你把java.exe改名,比如改成 myjava.exe 启动程序的时候 myjava your_class 这样进程就是myjava那些已经犯过的错误,有一些是因为来不及,有一些是因为刻意躲避,...

    如何修改java程序的进程名

    把javaw.exe改名 同样的,你把java.exe改名,比如改成 myjava.exe 启动程序的时候 myjava your_class 这样进程就是myjava那些已经犯过的错误,有一些是因为来不及,有一些是因为刻意躲避,更多的时候是茫然地站到了一边。小编们就这样错了一次又一次,却从不晓得从中汲取教训,做一些反省。

    更改java运行时进程的名字你会不会觉得别人都不懂你没有人给过你想要的关心。

    linux中java启动进程时设置不同的进程名在linux,java启动两个jar获得的进程名相同,为了避免kill其中一个进程好像不行,不过你可以带个无用的参数,这么杀的时候,判一下命令的参数也就是了。

    如何改java程序的进程名?

    运行一个java程序的时候,control+alt+del可以看见进程为javaw.exe,可javaw.exe是虚拟机的进程 java中没有进程的概念,都是线程。

    java怎么获取任务管理器中的应用程序名称。不是进就像这个,怎么知道哪个应用程序正在运行?遇见是两个人的事,离开却是一个人的决定,遇见是一个开始,离开却是为了遇见下一个离开。这是一个流行离开的世界,但是小编们都不擅长告别。

    Runtime.getRuntime().exec("tasklist /v");//显示了所有的程序详细信息,其中包括窗口标题等其他信息高考分数出来后,当同学都在感叹你的分数时,你能非常有底气的说一句你都不知道小编有多努力!”

    小编想把qora弄成小编自己想要的名字 这能实现吗 别人说meta inf里面有 小编看这程序大不,要是不大的话,你把它发到网盘上(或者在百度Hi上发给小编),小编帮你找。 另外,这个程序的标题完全是可以写在java代码里的。在初始化这个程序窗口的时候,即new JFrame("xxx"),这个xxx就是程序窗口标题栏的字,人家完全可以写死。

    如何修改JAVA游戏(程序)的名称

    JAVA游戏多半是英文名或缩写名称,游戏安装一多,有时就会分不清了。经网上几位好友的帮助指导,发现用WINRAR可以对JAVA安装程序进行改名。小编的电脑系统是WINXP(其它系统没试过),软件是WINRAR3.51。双击JAR文件,打开解压窗口。

    如何用Java关闭一个进程

    解决这个问题,要看这个进程是java程序自定义的进程,还是操作系统的进程,操作系统的进程,又可以分为windows进程和Linux进程 一、针对操作系统的进程: 1,首先java用户,要具有操作进程的权限 2. 针对windows操作系统的进程。

    展开全文
  • Linux C程序修改进程名称

    千次阅读 多人点赞 2021-05-12 22:13:26
    Linux C程序修改进程名称(通过修改argv[0])1、前言2、命令行参数(argc, argv)以及环境变量(environ)介绍2.1、C程序典型的存储空间布局2.2、argc, argv介绍2.3、environ介绍2.4、编写程序验证修改进程名是否可以...

    1、前言

    Linux C程序运行时,进程的名称通常就是argv[0],而通过修改内存中argv[0]存储的内容就可以修改进程名了。下面对此作详细介绍。

    2、命令行参数(argc, argv)以及环境变量(environ)介绍

    2.1、C程序典型的存储空间布局

    如图所示,是C程序典型的存储空间布局,可以很明显看到命令行参数环境变量处在最顶端,而且是挨在一起的,命令行参数后面紧接着就是环境变量,具体的内容大家可以自行看一下《UNIX环境高级编程》第七章,下图也是从里面摘录出来的
    在这里插入图片描述

    2.2、argc, argv介绍

    每个C语言程序都必须有一个称为main的函数,一般形式为int main(int argc, char* argc[]),改函数作为程序启动的起点。执行程序时,命令行参数通过argcargv这两个两个入参传递给main函数。第一个表示命令行参数的个数,而第二个参数则是一个指向命令行参数的指针数组,每一参数都是C类型字符串,以空字符\0结尾的,而最后一个参数argc[argv]则是一个空指针NULL。其中第一个字符串(argv[0]),则是该程序的名称,也就是运行时的进程名。

    内存示例如图所示
    在这里插入图片描述

    2.3、environ介绍

    每一个进程都有与其相关的称为环境列表(environment list)的字符串数组。其中每个字符串都以名称=值(name=value)形式定义。新进程在创建时,会继承其父进程的环境副本,子进程创建后,父、子进程均可更改各自的环境变量,且这些变更对对方而言不再可见。
    在C程序中,可以使用全局变量extern char** environ获取环境变量表(C运行时启动代码定义了该变量并以当前环境列表位置为其赋值)environargv参数比较相似,是一个指针数组,数组每个成员指向C类型字符串,最后一个指针也是一个NULL

    内存示例如图所示
    在这里插入图片描述

    2.4、编写程序验证修改进程名是否可以成功

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    
    int main(int argc, char* argv[])
    {
        sleep(8);
        strcpy(argv[0], "112233445566");
        while (1);                                                                                                           
     
        return 0;
    }
    

    代码如上,可以看到,程序先休眠8秒钟,然后修改argv[0]的值,编译运行一下,运行结果如下,可以看到,一开始进程名是./all,8秒后就变成了112233445566,修改成功,而且我们也能看出一点细节,那就是修改后的进程名超过了原先的进程名也没有报错,有可能的原因是argc[0]后面的内存也是可用的(其实从内存布局就可以看出来可用了)
    在这里插入图片描述

    2.5、查看进程名变长之后影响了那部分内存的数据

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    
    extern char** environ;
    
    int main(int argc, char* argv[])
    {
        printf("begin environ:\n");
        for (int i = 0; environ[i] != NULL && i < 5; i++)
            printf("%s\n", environ[i]);
    
        sleep(5);
        strcpy(argv[0], "112233445566");
        printf("\n\n");
    
        printf("end environ:\n");
        for (int i = 0; environ[i] != NULL && i < 5; i++)
            printf("%s\n", environ[i]);
    
        return 0;
    }
    

    代码如上,为了方便显示,环境变量只打印前五个,看看效果就行。运行结果如下图所示,可以看到,一开始打印的第一个环境变量为XDG_SESSION_ID=3585,当修改完进程名之后,该变量变为445566,原先进程名为./all,加上结束符是6个字节,剩余四个字节的内容也就是445566刚好把第一个环境变量的内存给覆盖了(这里没有传入参数,所以覆盖的是环境变量的内存)。
    在这里插入图片描述

    2.6、结论

    Linux C程序中传入参数和环境变量是存放在一段连续的内存空间的,而argvenviron这两个指针数组里面存放的指针就是指向这些内存的

    3、Redis修改进程名的做法

    Redis作为一个优秀的企业级存储框架,里面有许多值得学习的地方,而里面也有一段代码修改进程名的,接下来看看Redis是如何实现的

    extern char **environ;
    
    static struct {
    	/* original value */
    	const char *arg0;
    
    	/* title space available */
    	char *base, *end;
    
    	 /* pointer to original nul character within base */
    	char *nul;
    
    	_Bool reset;
    	int error;
    } SPT;
    
    void spt_init(int argc, char *argv[]) {
        char **envp = environ;
    	char *base, *end, *nul, *tmp;
    	int i, error, envc;
    
    	if (!(base = argv[0]))
    		return;
    
    	nul = &base[strlen(base)];
    	end = nul + 1;
    
    	for (i = 0; i < argc || (i >= argc && argv[i]); i++) {
    		if (!argv[i] || argv[i] < end)
    			continue;
    
    		if (end >= argv[i] && end <= argv[i] + strlen(argv[i]))
    			end = argv[i] + strlen(argv[i]) + 1;
    	}
    
    	for (i = 0; envp[i]; i++) {
    		if (envp[i] < end)
    			continue;
    
    		if (end >= envp[i] && end <= envp[i] + strlen(envp[i]))
    			end = envp[i] + strlen(envp[i]) + 1;
    	}
    	envc = i;
    
    	if (!(SPT.arg0 = strdup(argv[0])))
    		goto syerr;
    
    	if (!(tmp = strdup(program_invocation_name)))
    		goto syerr;
    
    	program_invocation_name = tmp;
    
    	if (!(tmp = strdup(program_invocation_short_name)))
    		goto syerr;
    
    	program_invocation_short_name = tmp;
    
        /* Now make a full deep copy of the environment and argv[] */
    	if ((error = spt_copyenv(envc, envp)))
    		goto error;
    
    	if ((error = spt_copyargs(argc, argv)))
    		goto error;
    
    	SPT.nul  = nul;
    	SPT.base = base;
    	SPT.end  = end;
    
    	return;
    syerr:
    	error = errno;
    error:
    	SPT.error = error;
    }
    

    从代码中可以看出以下几点:

    1. base指向的是argv[0]nul指向argv[1],而end经过两个for循环遍历之后指向的是传入参数+环境变量内存空间的最末尾
    2. 使用strdup函数将原本的进程名复制给SPT.arg0
    3. spt_copyenvspt_copyargs函数的作用是将原先的传入参数(从argv[1]开始)和环境变量复制到一个新的内存区域,然后原先的指针数组里元素指向新的内存地址,完成了数据的迁移
    4. 经过上面的步骤之后,argv[0]还是指向原来的地址,而其他的传入参数以及环境变量均指向新的内存空间了,现在就可以任意修改进程名而不影响其他数据了

    4、总结

    本文介绍了如何修改Linux C程序的进程名,以及Redis源代码中是如何在保持原有传入参数以及环境变量的情况下,对程序的进程名进行修改。测试代码比较简单,大家可以自行编写程序去进行测试验证

    展开全文
  • 修改当前程序文件名,命令:ren 旧文件名新文件名 删除旧文件,命令:del /q /f 旧文件名程序全路径 启动新的程序,命令:start {3} 新文件名程序全路径 3、运行bat文件 先看一下效果图: 批处理工具类:...

    实现原理:

    1、获取当前程序的进程名称

    2、创建批处理bat文件,批处理bat文件一共实现四个功能:

    • 杀死当前进程,命令: taskkill /f /im 当前进程名称
    • 修改当前程序文件名,命令:ren 旧文件名 新文件名
    • 删除旧文件,命令:del /q /f 旧文件名程序全路径
    • 启动新的程序,命令:start {3} 新文件名程序全路径

    3、运行bat文件 

    先看一下效果图:

    批处理工具类:BatUtils.cs

    /// <summary>
        /// 批处理工具类
        /// </summary>
        class BatUtils
        {
            /// <summary>
            /// 写入bat文件
            /// </summary>
            /// <param name="fileContent"></param>
            /// <param name="filePath"></param>
            public static void writeBATFile(string fileContent, string filePath)
            {
                FileStream fs1 = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);//创建写入文件
                StreamWriter sw = new StreamWriter(fs1, Encoding.GetEncoding("GB2312"));
                sw.WriteLine(fileContent);//开始写入值
                sw.Close();
                fs1.Close();
            }
            /// <summary>
            /// 执行bat文件
            /// </summary>
            /// <param name="filePath">所在目录</param>
            /// <param name="fileName">文件名</param>
            public static bool runBATFile(string filePath, string fileName)
            {
                bool flag = false;
                Process proc = null;
                try
                {
                    string targetDir = string.Format(filePath);
                    proc = new Process();
                    proc.StartInfo.WorkingDirectory = targetDir;
                    proc.StartInfo.FileName = fileName;
                    proc.StartInfo.Arguments = string.Format("10");
                    proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//这里设置DOS窗口不显示
                    proc.Start();
                    proc.WaitForExit();
                    proc.Close();
                    flag = true;
                }
                catch (Exception ex)
                {
                    flag = false;
                    Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
                }
                return flag;
            }
            /// <summary>
            /// 运行cmd命令
            /// </summary>
            /// <param name="command"></param>
            public static void RunCmd(string command)
            {
                //不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
                //command = command.Trim().TrimEnd('&') + "&exit";
                using (Process p = new Process())
                {
                    p.StartInfo.FileName = "cmd.exe";
                    //是否使用操作系统shell启动
                    p.StartInfo.UseShellExecute = false;
                    //接受来自调用程序的输入信息
                    p.StartInfo.RedirectStandardInput = true;
                    //输出信息
                    p.StartInfo.RedirectStandardOutput = true;
                    //输出错误
                    p.StartInfo.RedirectStandardError = true;
                    //不显示程序窗口
                    p.StartInfo.CreateNoWindow = true;
                    //启动程序
                    p.Start();
                    //向cmd窗口发送输入信息
                    p.StandardInput.AutoFlush = true;
                    p.StandardInput.WriteLine(command);
                    //获取cmd窗口的输出信息
                    //string output = p.StandardOutput.ReadToEnd();
                    p.WaitForExit();//等待程序执行完退出进程
                    p.Close();
                }
            }
        }

    Form1窗体代码:

     public partial class Form1 : Form
        {
            private string processName;//当前程序进程名
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //获取当前进程名称
                Process cur = Process.GetCurrentProcess();
                processName = cur.ProcessName;
                this.Text = processName;
            }
    
            private void btnSave_Click(object sender, EventArgs e)
            {
                string appName = txtAppName.Text.Trim();
                if (appName == string.Empty)
                {
                    MessageBox.Show("请输入程序名称");
                    return;
                }
                if (!appName.Contains(".exe"))
                    appName += ".exe";
                string newFilePath = Environment.CurrentDirectory + "//" + appName;
                //正在运行的程序路径和文件名
                string oldFilePath = Application.ExecutablePath;
                string appBat = String.Format(@"
                @echo off
                taskkill /f /im {0}
                ren {0} {1}
                del /q /f {2} 
                start {3}", processName+".exe", appName, oldFilePath, newFilePath);
                BatUtils.writeBATFile(appBat, "修改进程名.bat");
                //隐藏文件          
                FileInfo fi = new FileInfo(Environment.CurrentDirectory + "\\修改进程名.bat");
                fi.Attributes = fi.Attributes | FileAttributes.Hidden;
                if (File.Exists("修改进程名.bat"))
                {
                    BatUtils.runBATFile(Environment.CurrentDirectory, "修改进程名.bat");
                }
            }
    
        }

     

    展开全文
  • WIN下 修改,伪装进程路径。支持XP,WIN7 WIN764
  • python修改进程名

    千次阅读 2020-12-09 19:25:09
    一般情况下,我们直接启动python程序后使用ps查看,显示的结果为pyton xxx.py,web类应用使用netstat或ss查看显示为python。...setproctitle.setproctitle("进程别名") 导入模块,在程序的入口设置就好了。 .
  • Python程序自定义进程名

    千次阅读 2021-02-08 22:40:56
    本文概述:介绍了python开发的程序如何修改为自定义进程名。笔者在公司里实际项目开发中遇到过一个问题,就是在开发多进程模型的程序里,好家伙,进程名都是 python ,有种“双兔傍地走,安能辨我是雄雌
  • 修改程序标题小工具

    2019-01-29 17:36:09
    可以获取到其他程序窗口标题,获取程序窗口类名,获取程序窗口句柄 ,修改任意名称的标题
  • 两个地方 1.HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache FriendlyAppName改成自定义的名称 2.如果上面的注册表位置没有出现...找到要修改程序\shell\open,修改FriendlyAppName ...
  • 修改进程名字

    千次阅读 2015-12-22 09:20:55
    每一个c程序都有个main函数,作为程序启动入口函数。main函数的原型是int main(int argc , char *argv[]);其中argc表示命令行参数的个数;argv是一个指针数组,保存所有命令行字符串。Linux进程名称是通过命令行参数...
  • 有没有办法更改在Linux上运行python脚本的进程的名称?当我执行ps时,我得到的只是“python”进程名称。参考方案http://code.google.com/p/procname/用法示例:# Lets rename:>>> procname.setprocname('My ...
  • Python 重命名进程名

    2021-09-23 14:40:15
    下面的这个方法加入到python文件中,可以设置自己独有的进程名。 安装包: pip install setproctitle 代码: import setproctitle # 获取当前进程名 # Windows可能有问题 # proc_title = setproctitle....
  • 程序进程,线程的区别和联系

    万次阅读 多人点赞 2018-08-26 22:27:18
    进程程序区别和联系表现在以下方面: 1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期...
  • 如何设置Java程序进程名称?

    千次阅读 2021-07-17 01:54:36
    If a Java program is started, it get's in the system process-monitor the name java. Many Java-programs are that way hard to distinguish. So it would be nice, if a way exists, to set the name, that wi....
  • 更改终端显示的进程名
  • 易语言防止进程被关闭源码,防止进程被关闭,刷新进程信息,修改API首地址,还原API,安装全局钩子,修改虚拟保护,返回虚拟信息,取程序或DLL句柄,取DLL函数地址,写内存字节,api_ExitWindowsEx,创建进程快照,开始进程快照,...
  • c#修改程序名称

    2021-05-23 10:43:58
    修改项目名称,主要是通过以下几个步骤就能完成: 修改解决方案的名称。 修改解决项目名称。 修改项目的程序集名称和默认命名空间 ... 项目程序名称和默认命名空间的修改:选择项目右键属性中,就..
  • 在 CMD 里根据进程名杀掉进程

    千次阅读 2020-06-30 09:59:12
    在 CMD 里根据进程名杀掉进程 - walterlv 在 PowerShell 里根据进程名杀掉进程 - walterlv 本文内容taskkill 命令 taskkill 命令 taskkill /f /t /im chrome.exe /f 表示强制终止进程。如果不指定,那么 taskkill ...
  • linux根据进程名杀死进程

    万次阅读 2018-07-12 19:45:02
    笔记:根据一个进程的名字或...ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk '{print $2}' | xargs kill -9 测试: 终端输入: sleep 200 & sleep 200 & ps -ef | grep sleep | grep -v ...
  • 如何更改进程名称 在进入正题之前,我们需要了解一下以下参数的作用: int main(int argc,char * const*argv) {} 相信大家一定都见过以上的参数项,但是从来都没有使用过,但是通过对linux编程的学习,我们可以了解...
  • C++ vc程序 进程优先级设置

    千次阅读 2020-06-16 09:57:05
    #include <windows.h> SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
  • 事实上,进程程序替换会更改代码区的代码,也要发生写时拷贝。这样,就可以让子进程执行全新的程序。 关于exec*函数的返回值 —— 只要进程程序替换成功,就不会执行后续代码,因此,exec*函数成功是不需要进行...
  • 修改指定进程环境块中的进程路径以及命令行信息,从而达到进程 伪装的效果。 获取进程的句柄 内联汇编获取peb 修改命令行和imagepath #include<windows.h> #include<winternl.h> BOOL ...
  • 程序图标使用的是res下的XXXX.ico, 与工程相同。 我的办法是,将旧图标重命名,新图标拷贝进来后,明为:XXXX.ico 重新编译后,发现图标没变化, 参考...
  • 在 PowerShell 里根据进程名杀掉进程

    千次阅读 2020-06-30 10:02:29
    在 CMD 里根据进程名杀掉进程 - walterlv 在 PowerShell 里根据进程名杀掉进程 - walterlv 本文内容Stop-Process / killtaskkill 命令其他间接玩法Process.Kill Stop-Process / kill PowerShell 脚本 Stop-Process ...
  • 1. 修改工程(apk名称) 在弹出的对话框中输入新名称 该操作实际上是修改/.project下的节点。但由于某种原因,只修改该文件的话,在adt-bundle中,显示的工程名称仍然为老名称,只是apk的名称变为了新名称,因此...
  • #一、关闭一个进程比较麻烦,方法有好几种 对网上的进行了整理和代码注释 ##1.获得窗口的句柄之后,那么可以使用向该窗体发送消息的进行进程的关闭。 ###1.1直接给目标窗口发送WM_CLOSE /* 向该窗体发送WM_CLOSE消息...
  • 在一个安卓应用程序工程创建之初,包名就已经确定。包更多的是一个编译时概念。由android IDE自动生成的类,比如R、BuildConfig,都是以AndroidManifest.xml中定义的包来构造类名,譬如,包为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 891,191
精华内容 356,476
关键字:

修改程序进程名