2010-08-25 77 views
6

编辑使用给定的参数1使用lsof的获取文件名

我有问题的列表。也许这是我通过NSTask传递我的观点的方式?有关我如何做到这一点的任何建议?

NSTask *file_Task = [NSTask new]; 
[file_Task setLaunchPath:@"/usr/sbin/lsof"]; 
[file_Task setArguments:[NSArray arrayWithObjects:@"+p", the_Pid, nil]]; 

下午好研究员打码机....

我使用下面的命令:

lsof +p 13812 

获得通过的进程访问的文件列表。关键是它给了我很多的附加信息,我不想如类型,设备等

有没有办法,我可以添加到上面的命令参数,使我得到ONLY名称

谢谢,谢谢谢谢! :)

埃里克

+0

您是否还'只'想要打开该进程的文件? 'lsof'将为所有打开的文件描述符(文件,套接字,ttys等)以及当前工作目录,共享库返回一个条目。 – Beano 2010-08-27 15:39:22

回答

4

您可以使用:

lsof -Fn +p 12345 

这将输出线路的列表,第一个是p随后的进程ID, 和由n的所有行,随后由文件名。

如果您想快速预处理这一点,你可以做类似如下的内容:

lsof -Fn +p 12345 | tail -n +2 | cut -c2- 

更多信息,请参见lsof man page,特别是OUTPUT FOR OTHER PROGRAMS标题下。

3

尝试:

 
lsof | tr -s ' ' | cut -d' ' -f9 
+0

不幸的是,这也会打印标题。 – Dave 2015-04-08 17:22:49

0

lsof的+ P 9174 | AWK“{打印$ 9}”

+2

考虑文件名中的空格。 – 2014-02-27 13:15:19

1

清单当前播放的歌曲(nfs文件,由用户访问的MPD):

$ sudo lsof -N -a -u mpd -Fn | 
    sed '/n/!d; s/^n//' 
/R/audio/[...] Jay-Jay Johanson , So Tell The Girls That I Am Back.mp3 

的SED部分删除任何线不开始n和在最后的输出中移除ñ。