Unix Process State

问题

有时候会在晚上睡觉之前开始在mac mini上下几个大文件或者跑brew update,等命令跑到一半发现不想再继续等下去了,因为等待的时间比预期的远远要长。我又不想因为一句命令让机器一整晚上都运行着,还是想着应该让这个命令结束之后再立刻休眠(pmset sleepnow)。

于是问题来了,我要么找到结束当前正在一直运行的这个命令再重新编辑(追加&& pmset sleepnow)达到效果,要么想办法找到那个进程执行完毕的那个时间点。其实对于brew update这类命令的话,结束执行再跑一点儿关系都没有,主要还是针对curl和封装了curl的任务,毕竟杀掉了重新来过一般只能重新开始。

思路

在这之前我是知道jobs, fgbg这几个常用命令的:一个在运行的程序,如果我发送Ctrl+Z的组合时间给它,就相当于挂起(suspend)了这个进程,这个时候开始它只能等待恢复(或者直接被杀掉)。jobs能直接查看到当前shell的进程列表中所有的任务列表,通过fg可以把最顶端挂起的任务恢复并分发到前台运行模式,相当于把目标任务提到了当前shell的正在执行的命令模式,相当于接替上一个状态继续执行。bg的作用基本一致,区别在于目标任务被分到了后台运行模式,当前shell仍然处于带输入模式接受下一个命令的执行。如果不考虑stdout或者目标任务的stdout被重定向到了其他文件,bg会表现得目标任务不存在一样,直到执行完毕会从后台运行模式下输出一个进程执行完毕的提示。

sleep举例:

➜ ~ 
  
Code Review Service

There is a wonderful channel called Code Review in Stack Exchange, it provides for a kind of question and answer style to review code for programmer.

Code Review Stack Exchange is a question and answer site for peer programmer code reviews.

Code Review不是一个新词,甚至是老生常谈。这次我们不讨论它的方式和规范,而是从商业的角度上看待这个问题。没有国外IT公司的开发经历,我们只基于国内的开发环境来看待这个问题。

论点

Read More
Symbolic link path in macOS

推荐阅读:What Are Aliases, Symbolic Links, and Hard Links in Mac OS X?

这篇对alias和symbolic link的区别解释得还是很全的,从应用层上看alias更针对普通用户的操作层,一次创建,随意移动,只有Finder能识别。对比了一下这两种文件的状态,发现主要区别还是alias只是一个普通二进制文件,Finder在创建alias的时候是完全创建了一个新的独立的文件,类型是MacOS Alias file。Finder的Get Info window中还可以对这种alias文件进行更改Original指向,也是对inode的直接修改,也难怪能够随意移动和创建alias及alias副本。只是不能在terminal里使用罢了。

尤其是针对目录的alias,这种文件在terminal几乎完全就是鸡肋。这个时候symbol link创建的目录快捷方式的就有优势多了,可以在cd之间来去自如,几乎就是一个真实存在的directory。

➜ ~ stat adir File: adir Size: 102 Blocks: 0 IO Block: 4096 directory Device: 1000003h/16777219d Inode: 24269459 Links: 3