送信しようとすると、SIGQUIT
次のメッセージが表示されます。
$ kill -s QUIT 4341
kill: unknown signal: SIGQUIT
kill: type kill -l for a list of signals
私はこれを見て驚きました:
$ kill -l
ZERR
だから何とかkill
すべての信号名がわかりません。これがUbuntuの素晴らしい点です(はい、アップグレードする時間ですが、それは別の質問です)
当然SIGQUIT
数字だけで送るのですが3
、kill
信号名を忘れてしまう原因は何ですか?
UPD:これはzshです。
$ type kill
kill is a shell builtin
$ echo $ZSH_VERSION $ZSH_PATCHLEVEL
5.0.2 1.5778
うまくいくかどうかを確認したので、/bin/kill
zshに関連することに違いありません。
答え1
これは、zsh実行可能ファイルの構築方法に問題があるようです。シグナルのリストは、コンパイル時にオペレーティングシステムによって決定されます。信号ではなくエラーによる終了を示す「偽信号」がリストの最後に追加されZERR
ます。ビルドでは、オペレーティングシステムのシグナルリストが空です。
ステファン・チャゼラスが犯人を識別する、これは最新バージョンのGCCコンパイラとのビルドスクリプトの非互換性が修正されました。。最新バージョンのzshをビルドすると、問題を解決する必要があります。しかし、Ubuntu artfulには、あなたのバージョンよりも新しいバージョンのzsh 5.2が付属しています。以前の長期サポートバージョンのUbuntuにも5.1.1があります。したがって、互換性テストに以前のバージョンが必要ない限り、独自のバージョンを維持する理由はありません。この以前のバージョンを維持する必要がある場合は、以前のバージョンのGCCでビルドしてください。
答え2
あなたのシェルはほぼ確実であり、それをエイリアスまたは関数として定義したzsh
かもしれません(確認に使用)。kill
type kill
しかし、まだあなたの状況を再現することはできません。
zsh$ kill -l 30
PWR
zsh$ kill -l 31
SYS
zsh$ kill -l 32
32
zsh$ kill -l -96
32
32
"ZERR"
はい、信号名テーブルのインデックスですzsh
。しかし、分かるように、(少なくとも私のシステムでは)最大信号数(31
)に正しく制限されています。
zsh
あなたの()とオペレーティングシステム()のecho $ZSH_VERSION $ZSH_PATCHLEVEL
バージョンで質問を更新してくださいuname -a
。私はこれがデプロイメントポートで跳ね返る悪いパッチの1つだと思います(アップストリーム開発者が見直さない迅速な「修正」)。
修正する:
zsh
artfulからパッケージをインストールしてみてください。リポジトリ(バージョン5.2.5)またはソースから最新バージョンを再コンパイルしてくださいzsh
。
問題は、実際には以前のバージョンのバグが原因で発生しました。zsh
/(システムヘッダーファイルで定義されているマクロ拡張の前に追加された行)によって生成された行の表示、混乱gcc
cpp
# lnum_of_definition "header.h" 3 4
signames2.awk
シグナルと数値のリストを生成するスクリプトです。スクリプトを変更したのではなく、-P
最新cpp
バージョンを渡したことに注意してくださいzsh
。
バラよりここ。ヒント @Stéphane Chazelasに感謝します。台本を見てみましたが、awk
私の才能が不足して何年も変わっていないので、彼らは犯人だとは思わない。