apt XXX installを強制停止したあとに再インストールする方法

再度インストールするまでの手順

自作OSを作る上でqumeというエミュレーターをインストールしていたのだが、インターネットの接続が不安定だったため強制停止した。 再度インストールをしようとしたところ以下のエラーが。

$ sudo apt install qemu
E: ロック /var/lib/dpkg/lock-frontend が取得できませんでした - open (11: リソースが一時的に利用できません)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

他のプロセスがaptを使用していることが原因みたい。 まずは$ sudo apt cleanしたが、同様のエラーが出てうまくいかず。 http://www.ifelse.jp/blog/ubuntu-02

今度は使用しているプロセスを特定し、killを試みる。

// プロセスの特定
$ ps aux | grep apt
XXX      17428  0.0  0.0  22560  1052 pts/0    R+   17:52   0:00 grep --color=auto apt
root     18595  0.0  0.0  74076  4444 pts/0    T     3月09   0:00 sudo apt install qemu
root     18599  0.0  1.0 142620 86348 pts/0    T     3月09   0:00 apt install qemu
_apt     18621  0.0  0.1  90272  8792 pts/0    T     3月09   0:00 /usr/lib/apt/methods/http

// プロセスをkill
$ sudo kill 18595

killできてなかったのでオプション付きでやってみると無事にkillできた。

$ sudo kill -9 18595

$ ps aux | grep apt
$ ps aux | grep apt
XXX     17428  0.0  0.0  22560  1052 pts/0    R+   17:52   0:00 grep --color=auto apt

再び$ sudo apt install qemuを実行し、無事インストールが完了した。

やったことを振り返る

プロセスの特定

// プロセスの特定
$ ps aux | grep apt

$ ps auxについては実行中のプロセスの表示。 auxはオプションで

オプション 詳細
ps a 自分以外のユーザーのプロセスも表示する
ps u ユーザー名と開始時刻を表示する
ps x 制御端末のないプロセスの情報も表示する

psコマンドのその他のオプションは以下。 https://eng-entrance.com/linux-command-ps --sort STARTSTARTの順に表示等は使うかも。 $ ps auxfにするとツリー状で表示される。

それをパイプでgrepに渡した。

psで表示されたプロセスの見方。

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 225940  8700 ?        Ss    3月04   2:24 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S     3月04   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<    3月04   0:00 [kworker/0:0H]

USER:プロセスの所有ユーザー PID:プロセス番号 %CPU:CPUの占有率 %MEM:実メモリでの占有率 VSZ:仮想分も含めた使用サイズ(Kバイト) RSS実メモリ上の使用サイズ(Kバイト) TTY:端末名 STAT:プロセスの状態 STARTED:プロセスの開始時刻 TIME:プロセスの総実行時間 COMMAND:実行コマンド名とパス(シェル表記の場合もあり)

だいたい見たまんまの意味。 %CPUとか%MEMはパーセントが頭についてるから率のことを表してるはず。(調べてないです)

STATの状態は以下。

STAT 状態
R 稼動中
S 一時停止中
D 停止不可能で一時停止
T 終了処理中
Z ゾンビプロセス(すでに実体は無い)
W 実メモリ上に無くて,スワップアウトしている
N nice値(プロセスの優先順位)

特定のプロセスをkill

普通にkillしてもできなかったのは処理中だったからなので強制的にプロセスを終了した。 killのオプションはたくさんあった。

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

上記のようにたくさんオプションがあった。 今回はSIGKILLで強制的に終了させたが、あまり正しくない方法だったのかもしれない。 これについて詳しく掘り下げるのはまた別の機会にしたい。

参考:https://www.xmisao.com/2013/11/10/linux-kill-signals.html http://d.hatena.ne.jp/aqua-nora/20101210/1291969145 https://qiita.com/shuntaro_tamura/items/4016868bda604baeac3c

終わりに

いろいろ調べていく中でわかりやすい記事があったのでいかにメモしておく。 Ctrl+Cとkill -SIGINTの違いをわかりやすく説明していた。 http://equj65.net/tech/linuxprocessgroup/