Example:
DAG structure:
```
default_args = {
    'owner': 'dimon',
    'depends_on_past': False,
    'start_date': datetime(2021, 1, 10)
}

dag = DAG(
    'dummy-dag',
    schedule_interval='21 2 * * *',
    catchup=False,
    default_args=default_args
)

DagContext.push_context_managed_dag(dag)
task1 = BashOperator(task_id='task1', bash_command='echo 1')
task2 = BashOperator(task_id='task2', bash_command='echo 2')
task2 << task1
task3 = BashOperator(task_id='task3', bash_command='echo 3')
```

Let’s say you’ve missed the button and typed `--task-regex task4`.
When the backfill starts, firstly it will create a new empty DagRun and puts it in DB. Then the backfill job will go and try to find tasks that match the regex you’ve entered, will not find any obviously and will be stuck in the “running” state together with newly created DagRun forever.

airflow/cli/commands/dag_command.py
#
#
"""Dag sub-commands"""
import ast
import errno
import json
import logging
import signal
import subprocess
import sys
from graphviz.dot import Dot
from airflow import settings
from airflow.api.client import get_current_api_client
from airflow.cli.simple_table import AirflowConsole
from airflow.configuration import conf
from airflow.exceptions import AirflowException, BackfillUnfinished
from airflow.executors.debug_executor import DebugExecutor
from airflow.jobs.base_job import BaseJob
from airflow.models import DagBag, DagModel, DagRun, TaskInstance
from airflow.models.dag import DAG
from airflow.utils import cli as cli_utils
from airflow.utils.cli import (
    get_dag,
    get_dag_by_file_location,
    process_subdir,
    sigint_handler,
    suppress_logs_and_warning,
)
from airflow.utils.dot_renderer import render_dag