Java面试黄金宝典42

1. 查看进程打开了哪些文件

  • 定义

在 Linux 系统里,每个进程都有与之对应的 /proc 目录,该目录存有该进程的各类信息。其中,/proc/<pid>/fd 目录存放着此进程打开的所有文件描述符,每个文件描述符指向一个打开的文件。通过查看这个目录,就能知晓进程打开了哪些文件。

  • 要点
  1. /proc 文件系统属于虚拟文件系统,用于提供内核和进程的信息。
  2. /proc/<pid>/fd 目录下的文件描述符链接指向实际打开的文件。
  • 应用

在排查系统资源使用问题、调试程序时,了解进程打开的文件很有帮助。比如,若程序出现文件读写错误,可查看进程打开的文件是否正确。

  • 代码示例

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProcessOpenFiles {
    public static void main(String[] args) {
        int pid = 1234; // 需替换为实际的进程 ID
        try {
            Process process = Runtime.getRuntime().exec("ls -l /proc/" + pid + "/fd");
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

2. Linux 如何查看端口被哪个进程占用

 

  • 定义

在 Linux 系统中,可借助 netstat 或 ss 命令查看网络连接信息,其中包含端口和对应的进程。这些命令会列出所有网络连接,通过过滤指定端口,就能找出占用该端口的进程。此外,lsof 命令也能直接查看指定端口被哪个进程占用。

  • 要点
  1. netstat 和 ss 命令可用于查看网络连接信息。
  2. lsof 命令能直接查看指定端口对应的进程。
  • 应用

在启动新服务时,若端口被占用,可通过此方法找出占用端口的进程,然后决定是否关闭该进程以释放端口。

  • 代码示例

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PortOccupiedProcess {
    public static void main(String[] args) {
        int port = 8080; // 需替换为实际的端口号
        try {
            Process process = Runtime.getRuntime().exec("lsof -i :" + port);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

3. top 常用指令

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值