nohup和&后台运行,进程查看及终止,查看端口占用情况

本文介绍在Linux环境下如何使用nohup命令在后台运行程序,如何查看和管理后台进程,以及如何检查和释放被占用的端口。通过示例展示了如何使用ps、lsof和netstat命令来监控系统资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.nohup

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

  如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

  如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:   

  126 可以查找但不能调用 Command 参数指定的命令。   

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

2.&

用途:在后台运行

一般两个一起用

nohup command &

eg:

1

nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 &

进程号7585

查看运行的后台进程

(1)jobs -l

jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

(2)ps -ef 

1

ps -aux|grep chat.js

 a:显示所有程序 
 u:以用户为主的格式来显示 
 x:显示所有程序,不以终端机来区分

注:

  用ps -def | grep查找进程很方便,最后一行总是会grep自己

  用grep -v参数可以将grep命令排除掉

1

ps -aux|grep chat.js| grep -v grep

  再用awk提取一下进程ID 

1

ps -aux|grep chat.js| grep -v grep | awk '{print $2}'


 

3.如果某个进程起不来,可能是某个端口被占用

查看使用某端口的进程

1

lsof -i:8090

1

netstat -ap|grep 8090

查看到进程id之后,使用netstat命令查看其占用的端口

1

netstat -nap|grep 7779

使用kill杀掉进城后再启动

4.终止后台运行的进程

1

kill -9  进程号

 

Linux如何查看端口

1、lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000

# lsof -i:8000
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
lwfs    22065 root    6u  IPv4 4395053      0t0  TCP *:irdmi (LISTEN)

可以看到8000端口已经被轻量级文件系统转发服务lwfs占用

 

2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000

# netstat -tunlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4814/rpcbind        
tcp        0      0 0.0.0.0:5908                0.0.0.0:*                   LISTEN      25492/qemu-kvm      
tcp        0      0 0.0.0.0:6996                0.0.0.0:*                   LISTEN      22065/lwfs          
tcp        0      0 192.168.122.1:53            0.0.0.0:*                   LISTEN      38296/dnsmasq       
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5278/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      5013/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      5962/master         
tcp        0      0 0.0.0.0:8666                0.0.0.0:*                   LISTEN      44868/lwfs          
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      22065/lwfs        

 

# netstat -tunlp | grep 8000
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      22065/lwfs          

 

说明一下几个参数的含义:

                                

 -t (tcp) 仅显示tcp相关选项
                                 -u (udp)仅显示udp相关选项
                                 -n 拒绝显示别名,能显示数字的全部转化为数字
                                 -l 仅列出在Listen(监听)的服务状态
                                 -p 显示建立相关链接的程序名
 

 

 

<think>好的,我现在需要帮助用户解决在Linux上让LibreOffice在8100端口后台运行的问题。首先,我得理解用户的需求。用户提到了“8100端口后台运行LibreOffice”,这让我想到LibreOffice本身是否有内置的服务器功能或者可以通过某种方式监听端口。 首先,我需要回忆一下LibreOffice的功能。LibreOffice通常是一个桌面办公套件,主要用于文档处理、表格、演示文稿等,但可能有一些命令行选项或服务模式可以让它作为服务运行。用户可能希望将LibreOffice作为一个服务,通过某个端口提供功能,比如文档转换或者远程访问。 接下来,我需要确认LibreOffice是否支持通过指定端口运行。查阅相关文档,发现LibreOffice有一个`--headless`参数,用于无界面模式运行,适合脚本调用,比如文档转换。但默认情况下,它不会监听网络端口。不过,可能存在其他参数或扩展可以启用网络服务。 另外,用户提到“8100端口”,这可能是用户希望LibreOffice在该端口上提供服务。可能需要结合其他工具来实现端口监听,比如使用socat或者xinetd进行端口转发,或者利用LibreOffice的UNO组件,通过SDK进行远程调用。UNO(Universal Network Objects)是LibreOffice的组件模型,允许远程调用自动化。 用户可能的目标是希望远程调用LibreOffice的功能,比如将文档转换为PDF,或者进行其他操作,而无需在本地打开界面。这时候需要配置LibreOffice以监听某个端口,接受远程指令。 接下来,我需要考虑如何实现这一点。可能的步骤包括: 1. **使用LibreOffice的UNO桥接功能**:通过启动一个UNO服务,监听指定端口,允许远程连接。 2. **结合其他工具进行端口转发**:如果LibreOffice本身不支持直接监听端口,可能需要使用socat或类似的工具将标准输入输出重定向到网络端口。 3. **编写脚本或使用现有框架**:比如使用Python的UNO库来启动服务,并监听特定端口。 然后,我需要验证这些方法的可行性。例如,查找是否有通过UNO启动网络服务的示例。发现确实可以通过启动`soffice`命令,结合`--accept`参数来指定UNO连接字符串,从而监听端口。 例如,命令可能类似于: ```bash soffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" ``` 这里`--accept`参数指定了监听的协议、主机端口,允许远程进程通过该端口连接。这样LibreOffice就会在后台启动,并监听8100端口,处理传入的请求。 同时,用户可能希望这个进程后台持续运行,因此需要使用`nohup`或`&`将其放入后台,并可能记录日志。例如: ```bash nohup soffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" > /dev/null 2>&1 & ``` 此外,还需要考虑安全性问题,比如开放端口到0.0.0.0可能会暴露服务到公网,需要防火墙配置或使用更安全的绑定地址。 用户可能遇到的问题包括:命令参数是否正确,权限问题,端口冲突,以及如何测试服务是否正常运行。测试方法可以通过telnet连接端口,或者使用Python脚本尝试建立UNO连接。 最后,可能需要提供一些常见问题的解决方法,比如如何终止进程查看日志、确保服务开机启动等。</think>### 在 Linux 上让 LibreOffice 后台运行并监听 8100 端口 LibreOffice 支持通过 **UNO(Universal Network Objects)** 组件实现远程调用功能,可通过命令行参数启动服务模式并绑定端口。以下是具体操作步骤: --- #### **1. 基础命令(直接运行)** ```bash # 启动 LibreOffice 服务,监听 8100 端口(前台运行) libreoffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" ``` - `--headless`:无界面模式运行(必需参数) - `--accept`:定义监听的协议端口(`socket` 表示 TCP 协议,`urp` 是 UNO 远程协议) - `host=0.0.0.0`:允许来自任意 IP 的连接(若仅需本地访问可改为 `host=127.0.0.1`) --- #### **2. 后台运行(推荐方式)** ```bash # 后台运行并忽略输出(使用 nohup 防止终端关闭后进程终止nohup libreoffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" > /dev/null 2>&1 & # 查看进程是否运行 pgrep -f "libreoffice.*port=8100" ``` --- #### **3. 验证服务状态** ```bash # 检查端口监听状态 netstat -tuln | grep 8100 # 输出应包含:tcp6 0 0 :::8100 :::* LISTEN # 通过 Python 脚本测试连接(需安装 pyuno) python3 -c ' import uno local_context = uno.getComponentContext() resolver = local_context.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local_context) ctx = resolver.resolve(f"uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext") print("连接成功!" if ctx else "连接失败") ' ``` --- #### **4. 关闭服务** ```bash # 通过进程终止 pkill -f "libreoffice.*port=8100" # 强制终止(若未正常退出) killall soffice.bin ``` --- ### **高级配置** #### **1. 开机自启动(Systemd 服务)** 创建配置文件 `/etc/systemd/system/libreoffice.service`: ```ini [Unit] Description=LibreOffice UNO Server After=network.target [Service] ExecStart=/usr/bin/libreoffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" Restart=on-failure User=your_username # 替换为实际用户名 [Install] WantedBy=multi-user.target ``` 启用服务: ```bash sudo systemctl daemon-reload sudo systemctl start libreoffice sudo systemctl enable libreoffice ``` --- #### **2. 安全限制** - **仅限内网访问**:将 `host=0.0.0.0` 改为 `host=192.168.1.100`(绑定特定 IP) - **防火墙规则**: ```bash # 允许 8100 端口(Ubuntu/Debian) sudo ufw allow 8100/tcp ``` --- ### **常见问题** | 问题现象 | 解决方法 | |---------------------------|--------------------------------------------------------------------------| | 端口占用 | 更换端口号(如 `port=8200`)或终止占用进程 `lsof -i :8100` | | 连接超时 | 检查防火墙规则,确认服务绑定 IP 是否正确 | | `pyuno` 模块缺失 | 安装依赖包:`sudo apt install libreoffice-script-provider-python` | | 权限不足 | 以当前用户或专用用户运行服务,避免使用 `root` | --- ### **典型用途** - **文档批量转换**:通过 Python/Java 远程调用,将 Word 转 PDF - **自动化报告生成**:结合 API 动态生成表格图表 - **无界面服务器环境**:在 Docker 容器中运行文档处理服务 --- ### **总结** 通过 `--accept` 参数启动 LibreOffice 的 UNO 服务,可实现后台运行网络调用。建议搭配 Systemd 管理进程,并通过防火墙限制访问范围。此方法适用于需要**远程文档处理**的自动化场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值