微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

POSIX:你如何确定自己的进程的文件映像,以便自己执行?

如何确定表示当前进程可执行文件文件

问题是argv[0]是不可靠的,就好像它是通过execXp调用的execXp ,满足不合格命令的path条目可能会或可能不会被预置。 而且,任何调用exec*调用者都可以用argv[0]代替任何东西。

因此,如果你运行ps ,你不能保证argv[0]是"/usr/bin/ps" 。 事实上,你可能保证了反对

我需要下列之一:

处理由于exception而展开的C ++析构函数中的pthread取消点

C#代码来查找所有安装的Office更新

fork()泄漏? 花更长,更长的时间来分叉一个简单的过程

在处理远程连接时要听什么ip? 127.0.0.1还是实际IP?

c#.net Windows 8应用程序的TcpClient代码端口到StreamSocket

完整的path名(没有做自己的pathsearch,以免我使用的envp不是shell使用的那个)

一个实时的,预先打开的文件描述符到与当前进程的映像对应的文件

一些魔术描述符对应于当前在内存中的代码段(不太清楚BSS段)

这样,在启动时,我可以快速打开一个FD到我自己的可执行文件(对于情况1,如果文件删除,变得无法打开),然后在更晚的date调用

int fexecve(int fd,char *const argv[],char *const envp[]);

自己fork / exec (通常OS-X需要在fork()之后解决全局和系统描述符状态的不可靠性)。 换句话说(这个例子当然是愚蠢的):

void magicallyReplicate(argc,argv) { if (!fork()) { magicallyExecMyself(argc,argv); } }

甚至只是:

void startOver(argc,argv) { magicallyExecMyself(argc,argv); }

当然,在我的例子中,我将使用不同的argv ,这样我可以在不同的模式下运行。

(早期的“否”反驳:你不能使用clone() ,因为它是fork()的血统)

QAudioDeviceInfo在Ubuntu上找不到认的audio设备

你如何获得在Linux中使用的临时文件文件名?

我应该传递哪个文件作为ftok()的path名参数

使用相同的窗口类多次调用RegisterWindow的副作用?

即使线程仍在运行僵尸进程

所以基本上,最简单的平台是MacOS(因为libc是完全破碎的,如果在fork和exec之间调用getaddrinfo segfault就是简单的东西) – 在Darwin上,内核在启动时将指定的二进制名称这个过程。 用main( http://unixjunkie.blogspot.co.uk/2006/02/char-apple-argument-vector.html )的第四个参数或者与_NSGetExecutablePath完全一样的方法检索它 – 这只是一个知道关于内核放置文件名的相同的特殊位置。

对于所有的平台,这是一个个案。 在这个线程中的完整细节: 找到当前可执行文件的路径没有/ proc / self / exe

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐