Получить параметры запуска приложения по идентификатору процесса в Mac OS X - PullRequest
0 голосов
/ 07 мая 2019

Я знаю, что команда 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...