$ k=v p &
[1] 3028
p
の方法はありますか /proc/3028/environ
の内容を変更するには k=v
は言うまでもありません while p
まだ実行中ですか?
承認された回答:
Linuxでは、スタック上の環境文字列の値を上書きできます。
したがって、エントリをゼロなどで上書きして非表示にすることができます。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[], char* envp[]) {
char cmd[100];
while (*envp) {
if (strncmp(*envp, "k=", 2) == 0)
memset(*envp, 0, strlen(*envp));
envp++;
}
sprintf(cmd, "cat /proc/%u/environ", getpid());
system(cmd);
return 0;
}
実行:
$ env -i a=foo k=v b=bar ./wipe-env | hd
00000000 61 3d 66 6f 6f 00 00 00 00 00 62 3d 62 61 72 00 |a=foo.....b=bar.|
00000010
k=v
で上書きされました
/ dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?
Rc.localを再作成する代わりに、SystemdでRc.localを正しく置き換えますか?