labnotes 0.0.108__tar.gz → 0.0.109__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {labnotes-0.0.108 → labnotes-0.0.109}/PKG-INFO +1 -1
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/context.md +3 -2
- labnotes-0.0.109/src/labnotes/daemon/finalize_lost_runs.py +24 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/run_daemon.py +2 -0
- labnotes-0.0.109/src/labnotes/utils/process_alive.py +13 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/.gitignore +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/CHANGELOG.md +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/MIGRATIONS.md +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/README.md +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/pyproject.toml +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/__main__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/cli.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/create_app.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/create_note.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/control_run.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/daemon_app.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/daemon_client.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/daemon_running.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/daemon_server.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/describe_status.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/ensure_daemon.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/exit_when_idle.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/remote_start.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/run_logs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/serve_daemon.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/socket_path.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/stop_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/watch_daemon.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon/watch_status.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/daemon_command.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/data_html.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/experiments.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/format_started.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/format_value.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/init.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/load_config.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/load_run.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/log.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/log_path.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/models.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/modes.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/note_path.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/output_html.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/read_config.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/read_path.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/retries.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/run_command.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/run_control.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/run_output.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/run_status.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/hold_folder.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/new_param_run_id.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/param_run_name.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/read_experiment_config.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/runner/write_run_json.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/save_note.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/server.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/group_cells.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/invocation_columns.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/invocation_rows.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/run_screen.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/testing-conventions.toml +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/tests/integration/conftest.py +0 -0
- {labnotes-0.0.108 → labnotes-0.0.109}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: labnotes
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.109
|
|
4
4
|
Summary: Browse experiment designs, notes, and run data from a folder.
|
|
5
5
|
Project-URL: Repository, https://github.com/thekevinscott/labnotes
|
|
6
6
|
Author-email: Kevin Scott <me@thekevinscott.com>
|
|
@@ -77,8 +77,9 @@ Each param is appended as `--name value`, with the name as written (use
|
|
|
77
77
|
and tables as JSON. labnotes writes `run.json` (params, created, ended, exit
|
|
78
78
|
code, `ended_by`, `signal`), `stdout.log` and `stderr.log` to the
|
|
79
79
|
run folder. `ended_by` is `"timeout"`, `"stop"` (labnotes stopped it),
|
|
80
|
-
`"signal"` (a signal labnotes didn't send, like the out-of-memory killer)
|
|
81
|
-
|
|
80
|
+
`"signal"` (a signal labnotes didn't send, like the out-of-memory killer),
|
|
81
|
+
`"lost"` (its process died unseen; the daemon marks these when it starts, with
|
|
82
|
+
`ended` set and `exit_code` null) or null (the script exited itself). `signal` is the signal number read from the
|
|
82
83
|
exit code (negative, or 128 + N from the shell), else null.
|
|
83
84
|
A run counts when it exited 0 and its `run.json` doesn't hold
|
|
84
85
|
`"excluded": true`, so excluding a run by hand means adding that key; the next
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import time
|
|
3
|
+
|
|
4
|
+
from labnotes.list_runs import UNFINISHED
|
|
5
|
+
from labnotes.models import LabnotesConfig
|
|
6
|
+
from labnotes.runner.write_run_json import write_run_json
|
|
7
|
+
from labnotes.tables.iso_time import iso_time
|
|
8
|
+
from labnotes.tables.open_tables import open_tables
|
|
9
|
+
from labnotes.utils.process_alive import process_alive
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def finalize_lost_runs(config: LabnotesConfig) -> None:
|
|
13
|
+
rows = await open_tables(config).query(
|
|
14
|
+
f"SELECT folder, run FROM runs WHERE {UNFINISHED}"
|
|
15
|
+
)
|
|
16
|
+
for row in rows:
|
|
17
|
+
run = json.loads(str(row["run"]))
|
|
18
|
+
pid, created = run.get("pid"), run.get("pid_created")
|
|
19
|
+
if isinstance(pid, int) and process_alive(
|
|
20
|
+
pid, created if isinstance(created, int | float) else None
|
|
21
|
+
):
|
|
22
|
+
continue
|
|
23
|
+
run |= {"ended": iso_time(time.time()), "ended_by": "lost"}
|
|
24
|
+
write_run_json(config.root / str(row["folder"]), run)
|
|
@@ -6,11 +6,13 @@ import uvicorn
|
|
|
6
6
|
from labnotes.daemon.daemon_app import daemon_app
|
|
7
7
|
from labnotes.daemon.daemon_server import DaemonServer
|
|
8
8
|
from labnotes.daemon.exit_when_idle import exit_when_idle
|
|
9
|
+
from labnotes.daemon.finalize_lost_runs import finalize_lost_runs
|
|
9
10
|
from labnotes.daemon.socket_path import socket_path
|
|
10
11
|
from labnotes.models import LabnotesConfig
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
async def run_daemon(config: LabnotesConfig) -> None:
|
|
15
|
+
await finalize_lost_runs(config)
|
|
14
16
|
path = socket_path(config.root)
|
|
15
17
|
app = daemon_app(config)
|
|
16
18
|
server = DaemonServer(
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import psutil
|
|
2
|
+
|
|
3
|
+
from labnotes.utils.tree_rss import SAME_START_SECONDS
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def process_alive(pid: int, created: float | None) -> bool:
|
|
7
|
+
try:
|
|
8
|
+
started = psutil.Process(pid).create_time()
|
|
9
|
+
except psutil.NoSuchProcess:
|
|
10
|
+
return False
|
|
11
|
+
except psutil.AccessDenied:
|
|
12
|
+
return True
|
|
13
|
+
return created is None or abs(started - created) <= SAME_START_SECONDS
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|