Sie sollten nicht proc_pid_cmdline() aufrufen.
Es ist eine nicht-öffentliche Funktion in fs/proc/base.c:
static int proc_pid_cmdline (struct seq_file * m, struct pid_namespace * ns, struct pid pid *, struct task_struct * Task)
Doch was sie tut, ist einfach:
get_cmdline (Aufgabe, m-> buf, PAGE_SIZE);
Es ist nicht wahrscheinlich, dass der vollständige Pfad zurückgegeben wird, und es ist nicht möglich, den vollständigen Pfad in jedem Fall zu ermitteln. Der arg [0] -Wert kann überschrieben werden, die Datei könnte gelöscht oder verschoben werden usw. Ein Prozess kann exec() auf eine Weise ausführen, die die ursprüngliche Befehlszeile und alle möglichen anderen Krankheiten verschleiert.
Ein Scan von meinem opensuse 12.3 System/proc/*/cmdline dreht sich alle Arten von weniger als nützlichen Ergebnissen auf:
/proc/1/cmdline
/sbin/init showopts
/proc/10/cmdline
/proc/11/cmdline
/proc/1163/cmdline
/sbin/dhclient6 -6 -cf /var/lib/dhcp6/dhclient6.eth0.conf -lf /var/lib/dhcp6/dhclient6.eth0.lease -pf /var/run/dhclient6.eth0.pid -q eth0
/proc/12/cmdline
/proc/13/cmdline
/proc/14/cmdline
/proc/15/cmdline
/proc/16/cmdline
/proc/17/cmdline
/proc/1710/cmdline
/sbin/dhcpcd --netconfig -L -E -HHH -c /etc/sysconfig/network/scripts/dhcpcd-hook -t 0 -h del1-dhp-32429 eth0
/proc/172/cmdline
/proc/185/cmdline
/proc/186/cmdline
/proc/187/cmdline
/proc/19/cmdline
/proc/2/cmdline
/proc/20/cmdline
/proc/21/cmdline
/proc/22/cmdline
/proc/23/cmdline
/proc/25/cmdline
/proc/254/cmdline
/proc/255/cmdline
/proc/26/cmdline
/proc/2671/cmdline
/usr/lib/upower/upowerd
/proc/2674/cmdline
/usr/lib/polkit-1/polkitd --no-debug
/proc/27/cmdline
/proc/2727/cmdline
/usr/lib/udisks2/udisksd --no-debug
/proc/28/cmdline
/proc/285/cmdline
/usr/lib/systemd/systemd-journald
/proc/286/cmdline
/proc/288/cmdline
/proc/29/cmdline
/proc/2913/cmdline
/usr/sbin/cron -n
/proc/2924/cmdline
/usr/sbin/sshd -D
/proc/3/cmdline
/proc/3023/cmdline
/usr/lib/postfix/master
/proc/3090/cmdline
pickup -l -t fifo -u
/proc/3091/cmdline
qmgr -l -t fifo -u
/proc/31/cmdline
/proc/311/cmdline
/usr/lib/systemd/systemd-udevd
/proc/3132/cmdline
/usr/lib/vmware/bin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
/proc/3168/cmdline
/usr/sbin/vmware-authdlauncher
/proc/32/cmdline
Werke für mich in openSUSE 12.3:
for I in /proc/*/cmdline; do echo $I; cat $I | tr '\000' ' '; echo; done
kann Ich weiß, was ist der Zweck dieses Projekts? und was wirst du damit erreichen? –
Wir bekommen nur die Kontrolle über Android-Framework und Kern. Wir möchten den Paketnamen an den Server senden, ohne die App und den Server zu ändern. – user2491515