# シェルコマンドの実行

この機能を使用すると、デバイス上でシェルコマンドまたは完全なシェルスクリプトを実行できます。すべてのコマンドはroot権限で実行されます。また、長時間実行されるスクリプトに対応するため、この機能はバックグラウンドで終了せずに実行されるスクリプトもサポートしています。

## フォアグラウンドでのコマンド実行

以下のように使用して、コマンドやスクリプトを素早く実行できます。この操作は現在のプロセスをブロックするため、スクリプトやコマンドの実行時間は長すぎてはいけません。実行時間が短い（0〜10秒以内）スクリプトに適しています。

```python
cmd = d.execute_script("whoami")
```

```python
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"
```

ステータスコード、標準出力、標準エラーが返されます。

```python
print (cmd.stdout)
print (cmd.stderr)
print (cmd.exitstatus)
```

```python
>>> result = d.execute_script("id")
>>> print (result.stdout)
b'uid=0(root) gid=0(root)\n'
>>> print (result.stderr)
b''
>>> print (result.exitstatus)
0
```

## バックグラウンドでのコマンド実行

バックグラウンドでのコマンド実行は、実行時間が長いスクリプトに使用されます。ユーザーが無限ループや無限出力のスクリプトを作成し、メモリが使い果たされる可能性があるため、バックグラウンドスクリプトの実行結果を知ることはできません。スクリプトの出力情報を取得したい場合は、スクリプト内でファイルに出力するようにしてください。

以下の呼び出しは、長時間のスクリプト `sleep` を実行し、このバックグラウンドスクリプトのIDである `sid` 文字列を返します。

```python
script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)
```

スクリプトが予期せぬ状況に陥った場合、以下の呼び出しでバックグラウンドで実行中のスクリプトを強制終了することもできます。

```
d.kill_background_script(sid)
```

以下の呼び出しで、`sid` を使用してバックグラウンドスクリプトが終了したかどうかを確認できます。

```python
d.is_background_script_finished(sid)
```

```python
>>> script = "sleep 100; exit 0;"
>>> sid = d.execute_background_script(script)
>>> print (sid)
ba06da93-c3aa-4457-b90e-247e42a16207
>>> d.is_background_script_finished(sid)
False
>>> d.kill_background_script(sid)
True
>>> d.is_background_script_finished(sid)
True
```