<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>开发者 on Ejecta</title>
    <link>https://www.ejecta.app/zh-hans/tags/%E5%BC%80%E5%8F%91%E8%80%85/</link>
    <description>Recent content in 开发者 on Ejecta</description>
    <generator>Hugo</generator>
    <language>zh-Hans</language>
    <lastBuildDate>Mon, 08 Dec 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.ejecta.app/zh-hans/tags/%E5%BC%80%E5%8F%91%E8%80%85/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>面向 Mac 用户的 lsof 命令详解</title>
      <link>https://www.ejecta.app/zh-hans/blog/lsof-command-mac-users/</link>
      <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://www.ejecta.app/zh-hans/blog/lsof-command-mac-users/</guid>
      <description>&lt;p&gt;你的外置驱动器推不出来。macOS 给你那条令人抓狂、含糊其辞的消息，说“可能有一个或多个程序正在使用它”。哪些程序？它不肯说。这正是 &lt;code&gt;lsof&lt;/code&gt; 派上用场的地方。&lt;/p&gt;&#xA;&lt;p&gt;这个名字代表“列出打开的文件”（list open files），而它做的正是这件事。在像 macOS 这样基于 Unix 的系统上，几乎一切都被当作文件，包括网络连接、设备和磁盘宗卷。当你无法推出一个驱动器时，&lt;code&gt;lsof&lt;/code&gt; 会精确地告诉你是哪个进程在扣押它。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本语法&#34;&gt;基本语法&lt;/h2&gt;&#xA;&lt;p&gt;在推出问题上使用 lsof 最简单的方式是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof /Volumes/YourDriveName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将“YourDriveName”替换为驱动器的实际名称。如果名称含有空格，就用引号把整个路径括起来：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;/Volumes/My Backup Drive&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这会返回一份列表，列出每一个在该宗卷上持有打开文件句柄的进程。每一行显示进程名称、它的 ID（PID）、运行它的用户，以及正被访问的具体文件的相关信息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;读懂输出&#34;&gt;读懂输出&lt;/h2&gt;&#xA;&lt;p&gt;一份典型的 lsof 输出看起来大致是这样的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME&#xA;mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...&#xA;Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最重要的几列是 COMMAND（进程名称）、PID（你用来终止它的进程 ID），以及 NAME（正被访问的实际文件路径）。&lt;/p&gt;&#xA;&lt;p&gt;FD 列显示文件是如何被使用的。一个数字后面跟着“r”表示读取访问，“w”表示写入，“u”表示读写皆有。如果你看到“cwd”，说明该进程把那个位置作为它的当前工作目录。当你有一个 Terminal 窗口打开在驱动器上的某个文件夹时，就会发生这种情况。&lt;/p&gt;&#xA;&lt;h2 id=&#34;找出是什么在阻止你的驱动器&#34;&gt;找出是什么在阻止你的驱动器&lt;/h2&gt;&#xA;&lt;p&gt;具体到推出问题，你通常只需知道出现了哪些进程名称。常见的肇事者包括 &lt;code&gt;mds&lt;/code&gt; 和 &lt;code&gt;mds_stores&lt;/code&gt;（聚焦索引）、&lt;code&gt;Finder&lt;/code&gt;、&lt;code&gt;QuickLookUIService&lt;/code&gt;（缩略图生成）和 &lt;code&gt;fsevents&lt;/code&gt;（文件系统监视器）。&lt;/p&gt;&#xA;&lt;p&gt;如果你看到大量输出、想缩小范围，你可以使用 grep：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
