8.1.5 退出进程

8.1.5  退出进程

Linux提供了几个退出进程相关的函数exit()_exit()atexit()on_exit()exit()函数的作用是退出当前进程,并且尽可能释放当前进程占用的资源。_exit()函数作用也是退出当前进程,但是并不试图释放进程占用的资源。atexit()函数的和on_exit()函数的作用都是为程序退出时指定调用用户的代码,区别在于on_exit()函数可以为设定的用户函数设定参数。这几个函数的定义如下:

 

#include <stdlib.h>

int atexit(void (*function)(void));

int on_exit(void (*function)(int , void *), void *arg);

void exit(int status);

 

#include <unistd.h>

void _exit(int status);

%提示:atexit()函数可以给一个程序设置多个退出时调用的函数,atexit()函数是按照栈方式向系统注册的,所以后注册的函数会先调用。

实例8-4  函数退出回调函数例程

 

1 #include <stdio.h>

2 #include <stdlib.h>

3 #include <unistd.h>

4

5 void bye(void)                    // 退出时回调的函数

6 {

7   printf("That was all, folks/n");

8 }

9

10 void bye1(void)                  // 退出时回调的函数

11 {

12   printf("This should called first!/n");

13 }

14

15 int main()

16 {

17   long a;

18   int i;

19

20   i = atexit(bye);               // 设置退出回调函数并检查返回结果

21   if (i != 0) {

22     fprintf(stderr, "cannot set exit function bye/n");

23     return EXIT_FAILURE;

24   }

25

26   i = atexit(bye1);              // 设置退出回调函数并检查返回结果

27   if (i!=0) {

28     fprintf(stderr, "cannot set exit function bye1/n");

29     return EXIT_FAILURE;

30   }

31

32   return EXIT_SUCCESS;

33 }

34

 

程序通过atexit()函数设置了两个退出时调用的函数bye()bye1(),按照atexit()函数注册的特点,bye1()函数最后注册的会被先执行,程序的运行结果如下:

 

This should called first!

That was all, folks

 

从程序结果可以看到,bye1()函数先被执行了。

F:\Anaconda\anaconda\envs\yolov8_pytorch\python.exe F:\Anaconda\anaconda\envs\yolov8_pytorch\训练脚本.py WARNING no model scale passed. Assuming scale='n'. Transferred 42/361 items from pretrained weights Ultralytics 8.3.143 Python-3.9.21 torch-2.7.0+cu126 CUDA:0 (NVIDIA GeForce RTX 4060 Laptop GPU, 8188MiB) engine\trainer: agnostic_nms=False, amp=True, augment=False, auto_augment=randaugment, batch=16, bgr=0.0, box=7.5, cache=False, cfg=None, classes=None, close_mosaic=10, cls=0.5, conf=None, copy_paste=0.0, copy_paste_mode=flip, cos_lr=False, cutmix=0.0, data=F:\Anaconda\anaconda\envs\yolov8_pytorch\fire_model.yaml, degrees=0.0, deterministic=True, device=0, dfl=1.5, dnn=False, dropout=0.0, dynamic=False, embed=None, epochs=200, erasing=0.4, exist_ok=False, fliplr=0.5, flipud=0.0, format=torchscript, fraction=1.0, freeze=None, half=False, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, imgsz=640, int8=False, iou=0.7, keras=False, kobj=1.0, line_width=None, lr0=0.01, lrf=0.01, mask_ratio=4, max_det=300, mixup=0.0, mode=train, model=F:\Anaconda\anaconda\envs\yolov8_pytorch\yolov8_CBAM.yaml, momentum=0.937, mosaic=1.0, multi_scale=False, name=yolov8_cbam_+RepulsionLoss5, nbs=64, nms=False, opset=None, optimize=False, optimizer=auto, overlap_mask=True, patience=100, perspective=0.0, plots=True, pose=12.0, pretrained=F:\Anaconda\anaconda\envs\yolov8_pytorch\\yolov8n.pt, profile=False, project=None, rect=False, resume=False, retina_masks=False, save=True, save_conf=False, save_crop=False, save_dir=runs\detect\yolov8_cbam_+RepulsionLoss5, save_frames=False, save_json=False, save_period=-1, save_txt=False, scale=0.5, seed=0, shear=0.0, show=False, show_boxes=True, show_conf=True, show_labels=True, simplify=True, single_cls=False, source=None, split=val, stream_buffer=False, task=detect, time=None, tracker=botsort.yaml, translate=0.1, val=True, verbose=True, vid_stride=1, visualize=False, warmup_bias_lr=0.1, warmup_epochs=3.0, warmup_momentum=0.8, weight_decay=0.0005, workers=4, workspace=None WARNING no model scale passed. Assuming scale='n'. from n params module arguments 0 -1 1 464 ultralytics.nn.modules.conv.Conv [3, 16, 3, 2] 1 -1 1 4672 ultralytics.nn.modules.conv.Conv [16, 32, 3, 2] 2 -1 1 7360 ultralytics.nn.modules.block.C2f [32, 32, 1, True] 3 -1 1 261 ultralytics.nn.modules.cbam.CBAM [32, 32] 4 -1 1 18560 ultralytics.nn.modules.conv.Conv [32, 64, 3, 2] 5 -1 2 49664 ultralytics.nn.modules.block.C2f [64, 64, 2, True] 6 -1 1 73984 ultralytics.nn.modules.conv.Conv [64, 128, 3, 2] 7 -1 2 197632 ultralytics.nn.modules.block.C2f [128, 128, 2, True] 8 -1 1 295424 ultralytics.nn.modules.conv.Conv [128, 256, 3, 2] 9 -1 1 460288 ultralytics.nn.modules.block.C2f [256, 256, 1, True] 10 -1 1 164608 ultralytics.nn.modules.block.SPPF [256, 256, 5] 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 12 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 13 -1 1 148224 ultralytics.nn.modules.block.C2f [384, 128, 1] 14 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 15 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 16 -1 1 37248 ultralytics.nn.modules.block.C2f [192, 64, 1] 17 -1 1 36992 ultralytics.nn.modules.conv.Conv [64, 64, 3, 2] 18 [-1, 13] 1 0 ultralytics.nn.modules.conv.Concat [1] 19 -1 1 123648 ultralytics.nn.modules.block.C2f [192, 128, 1] 20 -1 1 147712 ultralytics.nn.modules.conv.Conv [128, 128, 3, 2] 21 [-1, 10] 1 0 ultralytics.nn.modules.conv.Concat [1] 22 -1 1 493056 ultralytics.nn.modules.block.C2f [384, 256, 1] 23 [16, 19, 22] 1 751702 ultralytics.nn.modules.head.Detect [2, [64, 128, 256]] YOLOv8_CBAM summary: 137 layers, 3,011,499 parameters, 3,011,483 gradients, 8.2 GFLOPs Transferred 361/361 items from pretrained weights Freezing layer 'model.23.dfl.conv.weight' AMP: running Automatic Mixed Precision (AMP) checks... AMP: checks passed train: Fast image access (ping: 0.00.0 ms, read: 531.4141.0 MB/s, size: 44.3 KB) train: Scanning F:\Anaconda\anaconda\envs\yolov8_pytorch\xunlian3\labels\train.cache... 8310 images, 1 backgrounds, 0 corrupt: 100%|██████████| 8311/8311 [00:00<?, ?it/s] WARNING Box and segment counts should be equal, but got len(segments) = 12, len(boxes) = 16548. To resolve this only boxes will be used and all segments will be removed. To avoid this please supply either a detect or segment dataset, not a detect-segment mixed dataset. val: Fast image access (ping: 0.00.0 ms, read: 382.4127.6 MB/s, size: 45.9 KB) val: Scanning F:\Anaconda\anaconda\envs\yolov8_pytorch\xunlian3\labels\val.cache... 1057 images, 0 backgrounds, 0 corrupt: 100%|██████████| 1057/1057 [00:00<?, ?it/s] Plotting labels to runs\detect\yolov8_cbam_+RepulsionLoss5\labels.jpg... optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... optimizer: SGD(lr=0.01, momentum=0.9) with parameter groups 57 weight(decay=0.0), 67 weight(decay=0.0005), 66 bias(decay=0.0) Image sizes 640 train, 640 val Using 4 dataloader workers Logging results to runs\detect\yolov8_cbam_+RepulsionLoss5 Starting training for 200 epochs... Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size ⚠️ 使用默认超参数值 0%| | 0/520 [00:00<?, ?it/s] Traceback (most recent call last): File "F:\Anaconda\anaconda\envs\yolov8_pytorch\训练脚本.py", line 9, in <module> model.train( File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\engine\model.py", line 796, in train self.trainer.train() File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\engine\trainer.py", line 211, in train self._do_train(world_size) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\engine\trainer.py", line 390, in _do_train loss, self.loss_items = self.model(batch) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\nn\tasks.py", line 116, in forward return self.loss(x, *args, **kwargs) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\nn\tasks.py", line 313, in loss self.criterion = self.init_criterion() File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\nn\tasks.py", line 448, in init_criterion return E2EDetectLoss(self) if getattr(self, "end2end", False) else v8DetectionLoss(self) File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\ultralytics\utils\loss.py", line 203, in __init__ self.assigner = model.model[-1].assigner or TaskAlignedAssigner( File "F:\Anaconda\anaconda\envs\yolov8_pytorch\lib\site-packages\torch\nn\modules\module.py", line 1940, in __getattr__ raise AttributeError( AttributeError: 'Detect' object has no attribute 'assigner' 进程结束退出代码为 1
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值