问题是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设备
我应该传递哪个文件作为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] 举报,一经查实,本站将立刻删除。