kill
コマンドラインで使用すると機能します。
kill -SIGSTOP 1234
ただし、bashスクリプトファイルで使用すると、次のエラーが発生します。
kill: SIGSTOP: invalid signal specification
shファイルは
#!/bin/sh
kill -SIGSTOP 1234
kill
Bashスクリプトでどのように使用しますか?私はこれを試しました:
#!/bin/sh
/bin/bash -c "kill -SIGSTOP 1234"
しかし、うまくいきません。
答え1
これ標準(POSIX)構文例:
kill -s STOP "$pid"
つまり、SIG
プレフィックスはありません。一部のシェル実装はそれを拡張としてサポートしていますが、これは標準でも移植可能でもありませんkill -s SIGSTOP
。kill -SIGSTOP
UNIX仕様(POSIX + XSI)では、以下も受け入れます。
kill -STOP "$pid"
そして
kill -19 "$pid"
ただし、どのシグナル番号もSIGSTOP
指定されておらず、システム間または同じシステムのアーキテクチャ間で異なる可能性があるため、避けるべきです。
答え2
私は同じ問題に直面しています。ここにある答えのどれも問題の実際の原因をカバーしていません。スクリプト内でkill
使用されるものは組み込みです。シェルから提供、これがまさにエラーが発生する理由です。端末にkill
ある別の実行可能ファイルを使用してください/bin/kill
。この問題を解決するには、/bin/kill
スクリプトに組み込まれているバージョンの代わりにシェルバージョンを明示的に使用する必要があります。だからあなたは次のように書いています:
#!/bin/sh
/bin/kill -s SIGHUP 14344
答え3
まず、 SIGSTOP
プロセスは一時的に停止しますが、SIGCONT
後でシステムコールを使用して続行できるようにメモリに残ります。次の小さな部分を使用して、何が起こっているのかを確認できます。
#!/bin/bash
set -x
sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"
スクリプトが対話的に実行する操作を確認できます。
したがって、Shebangを使用してスクリプトを機能させるには、#/bin/sh
次の作業を行う必要があります。
#!/bin/sh
set -x
set +o posix
sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"
set -o posix