23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

導入―いかに被害なくうざいいたずらをするか

PCをログアウトせずに席を立ってしまった人に対していたずらをするというのは、誰しも考えたことがあるでしょう。しかし、実際には被害を出さずにいたずらを完遂するのは以外と大変です(被害というのはファイルの増加等も含みます)。一方で、単にlsをエイリアスにする程度ではいたずらとしては面白くない。そこで、被害を出さずに如何にうざいいたずらをするか、というのが今回の話題です。

尚、プログラマに対して行ういたずらであるのと個人的な好みから、いたずらはシェルで行います。

sayコマンドと無限ループ

Mac限定ですが、sayというコマンドがあります。これは引数を音読してくれるコマンドですが、これを無限ループと組み合わせるととてもうざいのではないか?と思いつきました。

ver1
while true; do say 'This is a joke.'; done;

バッググラウンドジョブにする

しかし、この単純な方法ではフォアグラウンドでジョブが走ってしまうために見つかりやすく、またシェルでCtrl-Cで終了してしまうため、持続性にも欠けます。

そこで、コマンド末尾に&を付けることで、バッググラウンドで走らせます。

ver2
while true; do say 'This is a joke.'; done; &

nohup

まだ問題があります。zshを使っている場合、バッググラウンドジョブがある状態でシェルを閉じることができません。これではシェルを閉じていたずらを隠蔽することができませんね。

そこで、nohupを使います。

ver3
nohup `while true; do say 'This is a joke.'; done; &`

ここでの注意点は、nohupの引数はバッククォートであるということです。

シェルを閉じて完成

これでシェルが閉じられます。別タブでシェルを開いてそこでコマンドを実行後、タブを閉じれば証拠は残らず、後ろではひたすら'This is a joke.'の音声が流れ続けます。これはうざい。

対処法

プロセスをkillすればいいと思ったのですが、なんと無限ループのたびにPIDが変わるため、そう単純には行きません。ではどうすればいいのか…それはご自分で考えてくださいね。

23
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?