/proc/self/exe与/proc/pid号/exe的问题
向各位请教在开发中碰到一个很奇怪的问题。有一个hello.c程序,还有一个test.c程序中使用readlink(2)通过/proc/self/exe来获得当前运行程序的,通过gcc test.c -o test -static编译,在ia64,x86_64和i386上都可以正常运行,但是当我在编译hello.c时通过gcc -Wl,--dynamic-linker test hello.c -o hello将test作为linker的时候,在i386和x86_64上用readlink(2)通过/proc/self/exe来获得当前运行程序失败,但在ia64上会成功:
[root@hpc-rm ld]# ./hello
pid is 22226
string is /proc/22226/exe
readlink: No such file or directory
[root@hpc-rm ld]# ./test
pid is 22239
string is /proc/22239/exe
real file is /home/baiwd/ld/test
修改成通过/proc/pid号/exe来读也是同样的效果。而且通过ll /proc/22239/看是有exe这个文件的,但通过ll /proc/22239/exe来看却报No such file or directory。
附test.c文件:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
char elf_file[65536];
pid_t pid;
char string[100];
pid = getpid();
printf("pid is %ldn", pid);
sprintf(string, "/proc/%ld/exe", pid);
printf("string is %sn", string);
sleep(20);
if (readlink(string, elf_file, 65536) == -1) {
perror("readlink");
return -1;
}
printf("real file is %sn", elf_file);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论