Marco Carmona 发布的文章

基本的 Git 命令 对于通常的克隆、添加、提交推送已经足够好了。

但如果你在一个有多个贡献者的大型项目上工作,你可能需要将事情可视化。GUI 工具可以让你更好地了解 diffstashblame 的情况。

但是,如果你常用终端,又想要 Git 的舒适性,我为你准备了一个好工具。

它叫 GitUI,它提供了类似于 Git GUI 的用户体验和舒适度,但就在你的终端中。它是可移植的、快速的、自由而开源的。

GitUI:一个基于终端的 Git 工具

GitUI 并不是第一个用于 Linux 终端的 Git 客户端。那么,是什么让 GitUI 与其他类似项目如 lazygittig 不同?

GitUI 的开发者在项目的 README 文件中分享了一些基准数据。

名称时间内存(GB)二进制(MB)冻结崩溃
gitui24 s0.171.4
lazygit57 s2.616有时
tig4 m 20 s1.30.6有时

GitUI、LazyGit 和 Tig 之间的比较。

这种优化大部分来自于 Rust 语言的使用。

注意:该程序处于早期开发阶段,还没有为生产做好准备。

在 Linux 上安装 GitUI

不用说,你应该已经 在你的系统上安装了 Git

要使用 GitUI,首先需要 为你的 Linux 发行版安装 Rust 支持

在终端中,使用以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Installing Rust on Linux

当你被要求选择时,请选择选项 1。当脚本完成安装后,用这个命令正确设置配置:

source $HOME/.cargo/env

现在你已经安装了 Rust 和它的包管理器 Cargo,使用 Cargo 命令来安装 GitUI:

cargo install gitui

然后你就可以使用 GitUI了,只需在终端输入 gitui 就可以运行了。我做了一些示例文件来测试 Git 和 GitUI。

Starting gitui on terminal

值得一提的是,这个界面有一个快速而直观的纯键盘控制。一切都很简单,只需输入正确的字母即可将文件暂存、提交、分支或推送到 git 仓库中。

真正让我兴奋的是,你不仅可以做之前的四个动作,还可以编辑每个文件,拉取它,追溯 它,在其中导航等等,这一切都无需退出界面。 很棒,不是吗?

More functions inside the interface

祝贺你! 现在你知道了如何安装 GitUI 以及它在你的终端中的样子。

如果你喜欢这个项目,请在 GitHub 上点赞它的仓库。如果你使用其他工具来管理 Git,请在评论区提出你的建议。


via: https://itsfoss.com/gitui/

作者:Marco Carmona 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这是一个关于如何寻找 Linux 系统僵尸进程并杀死它们的小知识。你也可以从中了解到关于进程和僵尸进程的一些知识。

在了解僵尸进程之前,让我们来复习一下什么是 Linux 进程。

简而言之,进程 是一个程序的运行实例。它可能运行在前端(比如有交互的进程),也可能运行在后端(比如无交互或自动运行的进程)。它可能是一个父进程(运行期间创建了其他进程),也可能是一个子进程(由其他进程所创建)。

在 Linux 系统中,除 PID 为 0 的第一个 init 进程(或 systemd)外,其余进程都有父进程。进程也可以拥有自己的子进程。

不相信?可以试试在终端中使用 pstree 命令查看进程的树型结构,你能看到系统各个进程的“家族树”。

Linux系统里的僵尸进程是什么?

子进程死亡后,它的父进程会接收到通知去执行一些清理操作,如释放内存之类。然而,若父进程并未察觉到子进程死亡,子进程就会进入到“ 僵尸 zombie ”状态。从父进程角度看,子进程仍然存在,即使子进程实际上已经死亡。这就是“ 僵尸进程 zombie process ”(也被称为“ 已消失进程 defunct process ”)是如何产生并存在于系统中的。

这里有一个来自 Turnoff.us 的关于僵尸进程的非常有趣的看法:

Image credit: Turnoff.us

你真的需要关心僵尸进程吗?

重点要说的是,僵尸进程并没有像它的名称那样看起来可怕。

但如果系统的内存已经所剩不多或者有太多的僵尸进程在吃掉内存,问题会变得糟糕。同样,大部分 Linux 系统进程最大 PID 设置为 32768,如果过多僵尸进程导致其他重要任务没有 PID 可用,你的系统会发生崩溃。

这是真实可能发生的,它有一定的概率,特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候。

在这种情况下,找到并杀死僵尸进程是一个明智的做法。

如何找到僵尸进程

Linux 系统中的进程可能处于如下状态中的一种:

  • D = 不可中断的休眠
  • I = 空闲
  • R = 运行中
  • S = 休眠
  • T = 被调度信号终止
  • t = 被调试器终止
  • Z = 僵尸状态

那如何查看进程和它的当前状态呢?一个简单的方法是在终端中使用 top 命令

Top command show processes and their status

正如你在上面截图中看到的,截图中共有 250 个任务(进程),其中 1 个处在 “ 运行中 running ” 状态,248 个进程处于 “ 休眠 sleep ” 状态,还有一个处于 “ 僵尸 zombie ” 状态。

现在问题进入下一步,如何杀死 “僵尸” 进程?

如何找到并杀死一个僵尸进程?僵尸进程能被杀死吗?

僵尸进程已经死了,要如何才能杀死一个已经死亡的进程呢?

在僵尸电影中,你可以射击僵尸的头部或烧掉它们,但在这里是行不通的。你可以一把火烧了系统来杀死僵尸进程,但这并不是一个可行的方案。

一些人建议发送 SIGCHLD 给父进程,但这个信号很可能会被忽略。还有一个方法是杀死父进程来杀死僵尸进程,这听起来很野蛮,但它却是唯一能确保杀死僵尸进程的方法。

首先,通过在终端中 使用 ps 命令 我们列举僵尸进程,得到它们的进程 ID:

ps ux | awk '{if($8=="Z+") print}'

ps ux 命令输出的第 8 列显示了进程状态。上述命令只会打印所有处在 Z+ 状态(表示僵尸状态)的进程。

确认了进程 ID 后,我们可以得到它的父进程 ID:

ps -o ppid= -p <child_id>

你也可以将上述两个命令结合在一起,直接得到僵尸进程的 PID 及其父进程的 PID:

ps -A -ostat,pid,ppid | grep -e '[zZ]'

现在你得到了父进程 ID,使用命令行和得到的 ID 号 终于可以杀死进程了

kill -9 <parent_process_ID>

Killing parent process

再次运行 ps 命令或 top 命令,你可以验证僵尸进程是否已经被杀死。

恭喜!现在你知道怎么清理僵尸进程了。


via: https://itsfoss.com/kill-zombie-process-linux/

作者:Marco Carmona 选题:lujun9972 译者:zengyi1001 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出