孤儿进程、僵尸进程与 Docker

前言(Intro)

我们知道当子进程还在运行时,其直接父进程被 kill 掉以后,这个子进程会变成孤儿进程(orphaned process),然后它会被 init 进程接管。

在 docker 容器中运行的进程,一般是没有 init 进程的。你可以进入容器使用 ps 查看,会发现 pid 为 1 的进程并不是 init,而是容器的主进程。

那么问题来了,如果容器中产生了孤儿进程,谁来接管这个进程?

如何解决问题?

前言(Intro)

在这里分享一下关于我处理问题时的一点经验,希望能对那些面对 BUG 或者其他问题而常常手足无措的人有所帮助。
这些经验谈不仅限于解决技术问题,其他生活或者工作中的问题也可以遵循这一套思路。
总结在前头,主要是五个步骤和四点要素。

  • 五个步骤:分析现象,定位问题,分析原因,解决问题,确认解决。
  • 四点要素:临危不乱,钜细靡遗,追本溯源,有的放矢。

如何将 Apache License 2.0 应用到你的项目

前言(Intro)

本文主要介绍 Apache License 2.0 的使用,不涉及其他许可证,也不解释其具体内容。

http://choosealicense.com/ 告诉了你如何选择开源许可证,然而并没有解释如何在自己的项目中正确地使用它。

无论是 stackoverflow、quora、知乎、google,都鲜有提到这个许可证的实际使用细节。我最终在 PETER J. FARRELL 的《How to Apply the Apache 2.0 License to Your Project》看到了我所需的信息,这篇文章介绍了使用 Apache License 2.0 时的具体步骤和注意点。非常有用。
以下内容是这篇文章的中文翻译:

好的项目是怎样的?

概览(Overview)

我觉得它应该至少包含以下几点:

  • README
  • 捕捉错误
  • 自定义错误类型
  • 健全的错误处理机制
  • 完善的日志
  • 低耦合高内聚的模块
  • 灵活且详细的配置管理
  • 自动化
  • 必要的测试
  • 文档
  • 清晰的目录结构
  • 对于第三方库进行二次封装
  • 不放置代码和文档以外的其他东西