首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux C:编译过程中更改进程名

Linux C:编译过程中更改进程名
EN

Stack Overflow用户
提问于 2013-08-26 14:45:06
回答 2查看 171关注 0票数 1

因此,我试图将c程序的进程名从crystal_capture更改为crystal_captured,它似乎希望保留旧的进程名(crystal_capture)。

这是makefile。

代码语言:javascript
复制
CC=gcc
CFLAGS=-c -Wall
MSFLAGS=-lpcap -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g -L/usr/lib/arm-linux-gnueabihf -lmysqlclient -lpthread -lz -lm -lrt -ldl
CAPTURE=crystal_captured

all: $(CAPTURE)

$(CAPTURE): parser.o $(CAPTURE).o
     $(CC) $(MSFLAGS) parser.o $(CAPTURE).o -o $@

$(CAPTURE).o: $(CAPTURE).cpp
    $(CC) $(CFLAGS) $(MSFLAGS) $(CAPTURE).cpp

parser.o: parser.c
    $(CC) $(CFLAGS) parser.c

clean:
    rm -rf *.o $(CAPTURE)

命令 make; sudo ./crystal_captured; ps -A | grep crystal

Seeing crystal_capture

因此,无论如何,我可以从编译中更改进程名,而不必进入代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-26 15:59:57

经过一些调试和帮助,我终于找到了答案。它并没有做错什么,它只是截断了我在名字上添加的'd‘。

它必须将其截短到最多15个字符。

票数 4
EN

Stack Overflow用户

发布于 2013-08-26 14:55:07

makefile目标是$(NAME),但是它输出到/bin/$(NAME),所以总是尝试重新构建目标。而且,写信给/bin/意味着您正在编译为root,不要这样做。您应该输出到目标的名称:

代码语言:javascript
复制
$(NAME): $(NAME).o
     $(CC) $(CFLAGS) $(NAME).o -o $(NAME)

最简单的方法是使用内建make变量,该变量引用目标:

代码语言:javascript
复制
$(NAME): $(NAME).o
     $(CC) $(CFLAGS) $(NAME).o -o $@

如果您希望目标在/bin/中(您不应该这样做),那么您可以这样做:

代码语言:javascript
复制
/bin/$(NAME): $(NAME).o
     $(CC) $(CFLAGS) $(NAME).o -o $@

但是目标名称和创建的文件应该仍然匹配,否则就会对make撒谎。

还可以使用内建变量,该变量引用第一个先决条件:

代码语言:javascript
复制
$(NAME): $(NAME).o
     $(CC) $(CFLAGS) $< -o $@

您的makefile非常没有意义,考虑到program_name.c,您可以编译一个简单的程序,而不需要这样的makefile:

代码语言:javascript
复制
make CFLAGS=-Wall program_name

这将使用make的默认规则来使用gccprogram_name.c编译gcc

您还没有说出问题所在,所以我不知道这是否与$(NAME)/bin/$(NAME)之间的差异有关,但是除非您重新定义这个问题,否则就不可能知道您看到的是什么,以及为什么您认为这是错误的。

除非流程更改argv[0],否则进程名只是可执行文件的名称,所以如果您执行/bin/foobar,那么进程名将是/bin/foobar。如果您想要更改它,只需更改可执行文件的名称,那就不难了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18446855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档