Я знаю, что команда Unix "ps" делает это, но она и подобные команды показывают командную строку только для процессов в стиле Unix. например, если я дважды щелкну png-файл в Finder, Preview.app откроет этот png-файл. если я выполню команду ps для pid Preview.app, результат будет:
ps -p 556
PID TTY TIME CMD
556 ?? 0:45.38 /Applications/Preview.app/Contents/MacOS/Preview
Как видно, командной строки нет (файл png)
Также этот код и другие решения, основанные на sysctl, действуют как команда ps:
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };
unsigned long buffer_size;
sysctl(mib, 4, NULL, &buffer_size, NULL, 0);
struct kinfo_proc *result = (kinfo_proc *)malloc(buffer_size);
sysctl(mib, 4, result, &buffer_size, NULL, 0);
int num_procs = buffer_size / sizeof(struct kinfo_proc);
for (int i = 0; i < num_procs; i++) {
struct kinfo_proc *pproc = result + i;
int mib[3] = { CTL_KERN, KERN_PROCARGS, pid_of(pproc) };
char *proc_argv;
unsigned long argv_len;
sysctl(mib, 3, NULL, &argv_len, NULL, 0);
proc_argv = (char *)malloc(sizeof(char) * argv_len);
sysctl(mib, 3, proc_argv, &argv_len, NULL, 0);
fwrite(proc_argv, sizeof(char), argv_len, stdout);
printf("\n");
free(proc_argv);
}
Есть ли способ получить доступ к параметрам запуска программ, запускаемых Finder?