因此,我试图将c程序的进程名从crystal_capture更改为crystal_captured,它似乎希望保留旧的进程名(crystal_capture)。
这是makefile。
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
因此,无论如何,我可以从编译中更改进程名,而不必进入代码。
发布于 2013-08-26 15:59:57
经过一些调试和帮助,我终于找到了答案。它并没有做错什么,它只是截断了我在名字上添加的'd‘。
它必须将其截短到最多15个字符。
发布于 2013-08-26 14:55:07
makefile目标是$(NAME),但是它输出到/bin/$(NAME),所以总是尝试重新构建目标。而且,写信给/bin/意味着您正在编译为root,不要这样做。您应该输出到目标的名称:
$(NAME): $(NAME).o
$(CC) $(CFLAGS) $(NAME).o -o $(NAME)最简单的方法是使用内建make变量,该变量引用目标:
$(NAME): $(NAME).o
$(CC) $(CFLAGS) $(NAME).o -o $@如果您希望目标在/bin/中(您不应该这样做),那么您可以这样做:
/bin/$(NAME): $(NAME).o
$(CC) $(CFLAGS) $(NAME).o -o $@但是目标名称和创建的文件应该仍然匹配,否则就会对make撒谎。
还可以使用内建变量,该变量引用第一个先决条件:
$(NAME): $(NAME).o
$(CC) $(CFLAGS) $< -o $@您的makefile非常没有意义,考虑到program_name.c,您可以编译一个简单的程序,而不需要这样的makefile:
make CFLAGS=-Wall program_name这将使用make的默认规则来使用gcc从program_name.c编译gcc。
您还没有说出问题所在,所以我不知道这是否与$(NAME)和/bin/$(NAME)之间的差异有关,但是除非您重新定义这个问题,否则就不可能知道您看到的是什么,以及为什么您认为这是错误的。
除非流程更改argv[0],否则进程名只是可执行文件的名称,所以如果您执行/bin/foobar,那么进程名将是/bin/foobar。如果您想要更改它,只需更改可执行文件的名称,那就不难了。
https://stackoverflow.com/questions/18446855
复制相似问题