Segmentation Fault が起こるプログラム外部要因

– ulimit -s で得られる、スタックの限界サイズを超えた場合、最初の代入を行った時点で Segumentation Fault (core dumped) になる。
例えば、

$ ulimit -s
65536

の時、次のようなコードで発生する。

/* オプティマイズされると処理がなくなるため、
 * gcc -O0 を付けてコンパイルすること。
 */
int main(int argc, char* argv[]){
    char ac[64 * 1024 * 1024];
    ac[0] = ‘\0’; // ここで発生
    return 0;
}

対策は、

ulimit -s [limit]

で十分なスタックサイズを確保することを許可すればよい。

リモートから任意のコマンドを実行する

$ ssh user@host command…
– CUI でどうやるんだっけなと思って ssh(1) を見たらそのままでした。コマンドは引数をとれるが、interactive な挙動も可能。って shell の代用で動かすのだからできて当然か。公開鍵認証とかでパスワードレスにすると遠隔バッチ処理に便利。

失敗

cat foo | sed -e ‘s/any/proc/’ > foo

ファイルの破壊、うっかりしてるとちょくちょくやる。 foo は 0 byte になってさようなら。これを回避するには、

sed -e ‘s/any/proc’ foo

でよい。

tmpfs

メモリ上に置ける FileSystem.
次のようにして使う.

mkdir /var/lib/mysql/shm
mount -t tmpfs -o size=1024m tmpfs /dev/shm
mount -t tmpfs -o size=1024m /dev/shm /var/lib/mysql/shm